我正在寻找一种便携式方式来接收(方便)$_SERVER['PATH_INFO']变量.
看了一会儿后,结果发现PATH_INFO是CGI/1.1,而且并不总是出现在所有配置中.
获得该变量的最佳方式(主要是安全方式)是什么 - 除了手动提取它(安全问题).
Ali*_*xel 11
好吧,我(几乎)确定不使用$_SERVER超全局密钥,提供另一种方法来解决这个问题PATH_INFO是不可能的,据说首先列出我们可能使用的所有$ _SERVER密钥:
我们显然需要忽略最后两个.现在我们应该(我不知道这个事实,我只是假设,因为你这么说)过滤你提供的链接中存在的所有密钥(BTW离线ATM),这给我们留下了以下密钥:
你现在只是变量变量.
SCRIPT_FILENAME是CGI规范的一部分.如果PATH_INFO不可用,它将无法 使用.至于REQUEST_URI,它是apache的mod_rewrite特定的. - LiraNuna
我正在使用PHP 5.3.0作为CGIcgi.fix_pathinfo = 1$_SERVER['REQUEST_URI']运行LightTPD/1.4.20-1(Win32),并且非常适合我,我还记得在没有人使用的时候使用相同的变量mod_rewrite所以我诚实的谦虚猜测是你在这一点上是完全错的.关于SCRIPT_FILENAME密钥,我无法测试那台ATM.尽管如此,如果我们非常努力地闭上眼睛并相信你是对的,那么我们只留下一个变量:
我并不想在这里苛刻(我仍然相信有更多的解决方案)但是如果这PHP_SELF是你希望我们使用的唯一关键(假设没有PHP_SELF自己的拼版),那么只剩下一个解决方案:
function PATH_INFO()
{
if (array_key_exists('PATH_INFO', $_SERVER) === true)
{
return $_SERVER['PATH_INFO'];
}
$whatToUse = basename(__FILE__); // see below
return substr($_SERVER['PHP_SELF'], strpos($_SERVER['PHP_SELF'], $whatToUse) + strlen($whatToUse));
}
Run Code Online (Sandbox Code Playgroud)
这个函数应该有效,但是使用常量可能会有一些问题,__FILE__因为它返回__FILE__声明常量的文件的路径,而不是所请求的PHP脚本的路径,所以这就是$ whatToUse的原因:你可以替换它'SCRIPT_FILENAME'或如果你真的相信你在说什么,只需使用'.php'.
您还应该阅读有关不使用原因的说明PHP_SELF.
如果这对你不起作用,我很抱歉,但我能想到其他任何事情.
编辑 - 为您提供更多阅读:
REQUEST_URIApache是特定的?)PHP_SELFvs PATH_INFOvs SCRIPT_NAMEvsREQUEST_URI| 归档时间: |
|
| 查看次数: |
11711 次 |
| 最近记录: |