Php $#u服务器[';请求URI';]在捕获查询字符串时的可靠性如何?

Php $#u服务器[';请求URI';]在捕获查询字符串时的可靠性如何?,php,query-string,Php,Query String,从我读到的内容来看,$\u SERVER['REQUEST\u URI']似乎并不总是正确地返回查询字符串,但是有人对成功率有很好的了解吗?在大多数情况下对普通客户有效吗 什么(如果有的话)会导致请求URI未填充或不包含查询字符串?您问: 什么(如果有的话)会导致不填充请求URI 我能想到的答案是: web服务器向PHP提供所有的$\u服务器值,因此如果服务器不提供这些值,则不会设置它们。这在任何一台像样的web服务器上都是不可能的,但也是可能的 如果从命令行运行PHP程序,它将不会有任何$\u

从我读到的内容来看,
$\u SERVER['REQUEST\u URI']
似乎并不总是正确地返回查询字符串,但是有人对成功率有很好的了解吗?在大多数情况下对普通客户有效吗

什么(如果有的话)会导致
请求URI
未填充或不包含查询字符串?

您问:

什么(如果有的话)会导致不填充请求URI

我能想到的答案是:

  • web服务器向PHP提供所有的
    $\u服务器
    值,因此如果服务器不提供这些值,则不会设置它们。这在任何一台像样的web服务器上都是不可能的,但也是可能的

  • 如果从命令行运行PHP程序,它将不会有任何
    $\u服务器
    值。(如果您不担心这一点,请记住单元测试通常是从命令行运行的,因此如果您遵循最佳实践并编写单元测试,这一点很重要)

  • 什么(如果有的话)会导致不填充请求URI

    谷歌搜索似乎表明IIS就是这样(但当时是这样,现在可能不是这样):

    (有一篇关于IIS修复程序的文章:)

    以及“服务器”不是标准web服务器的其他情况(例如调试服务器插件等)

    人们注意到了,但认为在鲜为人知或旧版本的web服务器(lighthttpd、iPlanet web Server 7.0)中存在缺陷


    所以我相信你可以合理地确定变量总是会被填充的。当然,最好尽早准备一个非常小的测试脚本在客户的站点上运行,以便提前得到警告。

    通常为0%或100%。取决于服务器。@WesleyMurch:所以完全取决于服务器?它似乎对我有用。这是否意味着可以安全地假设它适用于任何用户?我从未见过服务器不能正确填充此内容,也许你说的是CLI脚本?@PlatinumAzure:我只需要获取包含查询字符串的URL。我可以使用
    $\u GET
    进行此操作吗?如果它适用于您,则适用于使用同一服务器的任何用户。
    https://bugs.launchpad.net/xibo/+bug/654536