去掉或隐藏index.php后获取不到$_SERVER[‘PATH_INFO’]原因与解决方法

今天我用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_INFOREDIRECT_PATH_INFOREDIRECT_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信息
}
    A+
发布日期:2020年06月02日 16:57:47  所属分类:PHP
最后更新时间:2020-06-02 17:10:09
付杰
  • ¥ 199.0元
  • 市场价:399.0元
  • ¥ 198.0元
  • 市场价:398.0元
  • ¥ 199.0元
  • 市场价:399.0元
  • ¥ 39.0元
  • 市场价:39.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: