今天我用phpStudy测试 $_SERVER['PATH_INFO'] 的时候,结果发现如下的情况:
1、访问:http://127.0.0.1/index.php/category/a/b/c.html?id=5
可以获取到 $_SERVER['PATH_INFO']。
2、访问:http://127.0.0.1/category/a/b/c.html?id=5
却获取不到 $_SERVER['PATH_INFO']的值,显示未定义,为null。
原因:
这是由于我们没有对PATH_INFO做兼容判断处理,不能确保在所有的环境下面都可以支持。如果你确认你的空间不支持PATH_INFO的URL方式的话,有下面几种方式可以处理:
ORIG_PATH_INFO、REDIRECT_PATH_INFO、REDIRECT_URL三个系统$_SERVER变量的判断处理来兼容读取$_SERVER['PATH_INFO']。
解决方法
在解决问题前,这里我先申明一下:
我的phpStudy无论是apache还是php都是支持pathinfo的,apache伪静态规则文件 .htaccess 也是正常的,如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#如果页面出现"No input file specified." 请注释第一条,启用第二条
#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L]
</IfModule>
我们看了上面的原因,也就有了一个解决问题的方向,我简单的给大家写一个PHP示例代码,如下:
index.php
<?php
if(isset($_SERVER['PATH_INFO'])){
$get_path_info = $_SERVER['PATH_INFO'];
echo $get_path_info ;
}elseif(isset($_SERVER['REDIRECT_PATH_INFO'])){
$get_path_info = $_SERVER['REDIRECT_PATH_INFO'];
echo $get_path_info;
}elseif(isset($_SERVER['REDIRECT_URL'])){
$get_path_info = $_SERVER['REDIRECT_URL'];
echo $$get_path_info;
}elseif(isset($_SERVER['ORIG_PATH_INFO'])){
$get_path_info = $_SERVER['ORIG_PATH_INFO'];
echo $get_path_info;
}else{
echo 'pathinfo获取不到!请检查!';
}
当然:
你还可以封装一 个获取pathinfo的方法,例如:
function get_path_info(){
// 根据你的环境兼容获取PATH_INFO 具体代码略
return $path; // 直接返回获取到的PATH_INFO信息
}