function _get_script_url() {
if($this->var['PHP_SELF'] === null){
$scriptName = basename($_SERVER['SCRIPT_FILENAME']); 
if(basename($_SERVER['SCRIPT_NAME']) === $scriptName) { 
$this->var['PHP_SELF'] = $_SERVER['SCRIPT_NAME'];
} else if(basename($_SERVER['PHP_SELF']) === $scriptName) {
$this->var['PHP_SELF'] = $_SERVER['PHP_SELF'];
} else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $scriptName) {
$this->var['PHP_SELF'] = $_SERVER['ORIG_SCRIPT_NAME'];
} else if(($pos = strpos($_SERVER['PHP_SELF'],'/'.$scriptName)) !== false) {
$this->var['PHP_SELF'] = substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;
} else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT']) === 0) {
$this->var['PHP_SELF'] = str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));
} else {
system_error('request_tainting');
}
}
return $this->var['PHP_SELF'];
}说实话,这个方法我看着挺悲伤的,因为我不知道为什么一个简单的获取当前文件执行时的url会有这么复杂,所以相问各大侠这些添加else分支的原因 

解决方案 »

  1.   

    为适应复杂情况咱们开发没必要。
      

  2.   

    大的面向大众的代码必须完善,因为一个小小的疏忽就可能导致不能预料的后果,比如漏洞。所以在一开始就做出种种假设这是一种正确的思路。
    不过如上所说简单问题简单解决,如果我们没打算开源没打算铺得那么夸张那么适用就可以了