中文的注释是我自己翻译的 要是有错的地方 请指点下 小弟不胜感激
载了个bbpress 想学习下 一开始就遇到了这个问题
前两个判断 IIS版本还看的懂(网络上资料查的 或许是我理解错误)
到是到了第三个就看不懂了 请教下高手 这些代码的目的是做什么
感觉有点像ajax判断浏览器类型有几分相似之处
//如果$_SERVER['REQUEST_URI']内容为空 则运行
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
//判定是否是IIS7 并且赋值$_SERVER['REQUEST_URI']
if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
}
//如果不是IIS7 判定是否是IIS6 并且赋值$_SERVER['REQUEST_URI']
else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}
else
{
// 使用ORIG_PATH_INFO如果没有就使用PATH_INFO
if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) )
$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
if ( isset($_SERVER['PATH_INFO']) ) {
if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] )
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
else
$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO'];
}
// Append the query string if it exists and isn't null
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
}
}
PHP有很多预定义的环境变量 对于REQUEST_URI来说 使用率是非常高的..
但是有一个问题就是 只有APACHE才有REQUEST_URI这个预定义变量(这么说可能太绝对了)
换个说法就是 只有支持 PATH_INFO的服务器才支持REQUEST_URI;
为了程序的兼容性. 就需要判断当前服务器环境.然后给REQUEST_URI分配默认值 避免
由于不同服务器此值不存在的情况
这个要结合上下文环境才能判断,光凭这段代码看不出来
去网上找对应函数的作用,或者把需要的参数输出来,和调试一个意思。