php - 获取 PATH_INFO 的便携且安全的方法

标签 php pathinfo

我正在寻找一种便携方式来接收(方便的)$_SERVER['PATH_INFO'] 变量。

看了一会儿,发现 PATH_INFO 源自 CGI/1.1,我并不总是出现在所有配置中。

获取该变量的最佳(主要是安全方面)方法是什么 - 除了手动提取它(安全问题)。

最佳答案

好吧,我(几乎)确定如果不使用 $_SERVER 超全局键,提供另一种方法来找出 PATH_INFO 是不可能的,那被说lets first list all of the $_SERVER keys我们可能可能使用:

  • 'PHP_SELF'
  • “QUERY_STRING”
  • 'SCRIPT_FILENAME'
  • 'PATH_TRANSLATED'
  • 'SCRIPT_NAME'
  • 'REQUEST_URI'
  • 'PATH_INFO'
  • 'ORIG_PATH_INFO'

我们显然需要忽略最后两个。现在我们应该(我不知道这个事实,我只是假设因为你这么说)过滤你提供的链接中存在的所有键(which BTW is offline ATM),留下我们使用以下键:

  • 'PHP_SELF'
  • 'SCRIPT_FILENAME'
  • 'REQUEST_URI'

关于您对 Anthonys answer 的评论:

You are just juggling variables now. SCRIPT_FILENAME is a part of the CGI spec. It will not be available if PATH_INFO is unavailable. As for REQUEST_URI, it's apache's mod_rewrite specific. – LiraNuna

我正在运行 LightTPD/1.4.20-1 (Win32),PHP 5.3.0 作为 CGI,cgi.fix_pathinfo = 1$_SERVER['REQUEST_URI' ] 对我来说非常有用,我还记得在没有人使用 mod_rewrite 的日子里使用过相同的变量,所以我诚实谦虚的猜测是你'在这一点上显然是错误的。关于 SCRIPT_FILENAME key ,我无法在 ATM 上测试该 key 。尽管如此,如果我们非常努力地闭上眼睛并相信您是对的,那么我们只剩下一个变量:

  • 'PHP_SELF'

我并不想在这里变得苛刻(而且我仍然相信有更多的解决方案)但是如果 PHP_SELF 是您希望我们使用的唯一 key (假设有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));
}

此函数应该可以工作,但是使用__FILE__ 常量可能会出现一些问题,因为它返 echo 明__FILE__ 常量的文件的路径,并且不是请求的 PHP 脚本的路径,所以这就是 $whatToUse 存在的原因:所以你可以'SCRIPT_FILENAME' 替换它,或者如果你真的相信你所说的,只需使用 '.php'

您还应该 read this regarding why not to use PHP_SELF .

如果这对你不起作用,我很抱歉,但我能想到其他的。

编辑 - 为您阅读更多内容:

关于php - 获取 PATH_INFO 的便携且安全的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884041/

相关文章:

php - PHP 中的 PATH_INFO 到底是什么?

php - 未定义索引 : REMOTE_ADDR while Laravel migrate

php - 访问器和修改器?

php - 我正在使用 filemtime,它不断返回以下数字 : 1302021664. 这是为什么?

php - 第 12 行的 fatal error : Call to undefined function mysql_connect() in/usr/www/users/weddiycvvx/index. php

PHP 从 url 获取图像扩展名?

php - Laravel,验证 alpha_dash 防止破折号

PHP pathinfo 作为图像属性在服务器上不起作用

php - 如果文件名是 UTF-8,使 PHP pathinfo() 返回正确的文件名