如果您的服务器上启用了PATH_INFO,请签入PHP?

如果您的服务器上启用了PATH_INFO,请签入PHP?,php,pathinfo,Php,Pathinfo,在PHP中,是否有一种跨平台、跨web服务器的方法来确定您运行的服务器上是否启用了PATH_信息 看起来$\u服务器['PATH\u INFO']只有在脚本后面有额外的路径段时才会被填充,因此,如果请求是针对/index.php的,您无法可靠地判断PATH\u INFO是否已启用。我认为没有一种定义的方法来获取类似的Apache配置值 我想到的一个想法是使用file\u get\u contents()向 http://current_site_domain/check.php/test ch

在PHP中,是否有一种跨平台、跨web服务器的方法来确定您运行的服务器上是否启用了PATH_信息


看起来$\u服务器['PATH\u INFO']只有在脚本后面有额外的路径段时才会被填充,因此,如果请求是针对/index.php的,您无法可靠地判断PATH\u INFO是否已启用。

我认为没有一种定义的方法来获取类似的Apache配置值

我想到的一个想法是使用
file\u get\u contents()

http://current_site_domain/check.php/test
check.php
将输出
$\u服务器['PATH\u INFO']

如果请求的结果为“test”,则PATH_INFO起作用

当然,这可能会失败,因为打开URL被禁用,因为你不知道本地域,因为有防火墙,等等

另一种不太容易失败的方法是使用
iframe

<iframe src="/check.php/It%20works!"></iframe>


如果您在ifrane中看到“it works”,则PATH_INFO起作用。可能对安装过程有用

$\u服务器[“路径信息”]应始终可用。如果不是,则表示文件名和查询字符串之间没有额外的信息。

完全正确。“只有当请求映射到存在的文本路径时,才会接受该请求。因此,在上例中,如果请求的真实文件名(如/test/here.html/more)后带有尾随路径名信息,则会返回404 NOT FOUND错误。”如果AcceptPathInfo处于禁用状态,则不会执行脚本。(对吗?)?可能是为了一些安装过程或其他什么。虽然你的解决方案可能会更好,实际上。谁知道lighttpd和其他服务器如何处理路径信息?@Pekka,是的,你说得对。这个问题比看起来更复杂。是的,安装过程是一个用例。生成URL是另一个问题。如果url是'path/to/file',那应该是'script.php/path/to/file'还是'script.php?path=path/to/file'。如果path\u INFO被禁用,并且您在check.php之后附加了一个额外的段,那么fiel\u get\u contents()似乎会失败,可能是我的设置,但我似乎也无法捕捉到错误,或者我会用它作为未启用的标志。添加一个@to file\u get\u contents会抑制错误,结果是false,所以现在我就用这个。