【发布时间】:2011-04-12 02:18:55
【问题描述】:
$_SERVER['PATH_INFO'] 和 $_SERVER['ORIG_PATH_INFO'] 有什么区别?我该如何使用它们?
当我运行print_r($_SERVER) 时,数组中不存在PATH_INFO 和ORIG_PATH_INFO。为什么不?如何启用它们?
我已经阅读了关于它们的 PHP 手册,但仍然不明白。
【问题讨论】:
$_SERVER['PATH_INFO'] 和 $_SERVER['ORIG_PATH_INFO'] 有什么区别?我该如何使用它们?
当我运行print_r($_SERVER) 时,数组中不存在PATH_INFO 和ORIG_PATH_INFO。为什么不?如何启用它们?
我已经阅读了关于它们的 PHP 手册,但仍然不明白。
【问题讨论】:
PATH_INFO 变量仅在您调用这样的 PHP 脚本时出现:
http://www.example.com/phpinfo.php/HELLO_THERE
这只是.php 脚本之后的/HELLO_THERE 部分。如果你不这样调用 URL,就不会有$_SERVER["PATH_INFO"] 环境变量。
PORIG_ 前缀有点不常见。 PATH_INFO 是一个标准的 CGI 环境变量,不应该有前缀。你在哪里读到的? (如果您通过 cgi-bin/ 调用 PHP 解释器,PHP3/PHP4 会出现一些问题 - 但今天几乎没有人有这样的设置。)
【讨论】:
ORIG_PATH_INFO。似乎某些服务器配置创建了这个而不是 PATH_INFO。
ORIG_PATH_INFO: > 'PATH_INFO' 在 PHP 处理前的原始版本。
试试这个:
$path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : '');
【讨论】:
PATH_INFO 和 ORIG_PATH_INFO 很少使用。这些指的是请求路径中的任何内容(从第一个 / 开始的 URL 部分),位于文件名和查询字符串之后。通常,您不会在 URL 中包含 PATH_INFO。
我猜你的意思是 ORIG_PATH_INFO 而不是 PORIG_PATH_INFO。路径信息可能由 mod_rewrite 和 PHP 脚本本身等操作。 ORIG_PATH_INFO 是原始请求中的 PATH_INFO,在对字符串进行任何重写或其他操作之前。
【讨论】:
PATH_INFO 在 Symfony 和 ZF 中都使用过,所以我不会称它为“很少使用”
PATH_INFO 并且被 PATH_INFO 误导了一点,显然没有那么多使用。基于 WordPress 在内部使用:github.com/WordPress/WordPress/blob/4.4.4/wp-includes/…。公平地说,它已被使用 an awful lot,所以如果需要,请使用它!
ORIG_PATH_INFO 也用于 Agavi (AgaviWebRequest.class.php)。
在 5.2.4 之前,PATH_INFO 在默认配置中显然已损坏(未设置)。也许就是这样。
https://bugs.php.net/bug.php?id=31892
PHP 手册说ORIG_PATH_INFO 是:
PHP 处理前的“PATH_INFO”的原始版本。
【讨论】: