$_SERVER['REQUEST_URI'] 能够准确地捕获查询字符串吗?

6

据我所读,似乎 $_SERVER['REQUEST_URI'] 并不总是能正确返回查询字符串,但是有没有人对其成功率有清晰的了解?对于一般客户端,在大多数情况下是否有效?

如果 REQUEST_URI 未被填充或不包括查询字符串,有什么原因?


6
通常情况下,这要么是0%,要么是100%。取决于服务器。 - Wesley Murch
@WesleyMurch:所以这完全取决于服务器?对我来说它似乎是有效的。这是否意味着可以安全地假设它应该适用于任何用户? - David Jones
我从未见过服务器没有正确填充这个,也许你说的是一个 CLI 脚本? - Wolfgang Stengel
如果它对您有效,那么使用相同服务器的任何用户都可以使用它。 - Wolfgang Stengel
我不知道你需要URL。$_GET允许您获取查询字符串中的键和值。 - Platinum Azure
显示剩余2条评论
2个回答

6
您的问题是:
如果REQUEST_URI没有被填充,会有什么原因?
我能想到的答案有:
1. Web服务器将所有的$_SERVER值提供给PHP,因此如果服务器不提供它们,那么它们就不会被设置。但在任何像样的Web服务器上,这种情况都是极不可能发生的。
2. 如果您从命令行运行PHP程序,则它将没有任何$_SERVER值。(如果您不担心这个问题,请记住单元测试通常是从命令行运行的,所以如果您遵循最佳实践并编写单元测试,这是很重要的)

1
如果REQUEST_URI没有被填充,会是什么原因呢?
谷歌搜索似乎表明这在IIS中曾经是个问题(但那时的情况现在可能已经不同了)。
https://bugs.launchpad.net/xibo/+bug/654536

有一篇关于修复IIS的文章:http://davidwalsh.name/iis-php-server-request_uri

还有其他情况,其中“服务器”不是您的标准 Web 服务器(例如调试服务器插件等)。

在较少人知道或旧版本的Web服务器(lighthttpd,iPlanet Web Server 7.0)中注意到了这个问题,但被认为是一个错误。

因此,我相信您可以合理地确定变量始终会被填充。当然,最好准备一个非常小的测试脚本尽早在客户现场运行,以便提前预警。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接