如果在您的服务器上启用了 PATH_INFO,请检查 PHP?
Posted
技术标签:
【中文标题】如果在您的服务器上启用了 PATH_INFO,请检查 PHP?【英文标题】:Check in PHP if PATH_INFO is enabled on your server? 【发布时间】:2012-02-01 04:06:15 【问题描述】:从 php 中,是否有一种跨平台、跨 Web 服务器的方式来确定您正在运行的服务器上是否启用了 PATH_INFO?
似乎 $_SERVER['PATH_INFO'] 仅在脚本后有额外路径段时才会填充,因此如果请求是针对 /index.php 的,您无法可靠地判断 PATH_INFO 是否已启用。
【问题讨论】:
【参考方案1】:我认为没有固定的方法来获取这样的 Apache 配置值。
想到的一个想法是使用file_get_contents()
向
http://current_site_domain/check.php/test
check.php
将输出$_SERVER['PATH_INFO']
。
如果请求的结果是“测试”,PATH_INFO 有效。
当然,这可能会失败,因为打开 URL 被禁用,因为您不知道本地域,因为有防火墙等等等等。
另一种不太容易失败的方法是使用iframe
:
<iframe src="/check.php/It%20works!"></iframe>
如果您在 ifrane 中看到“它有效”,则 PATH_INFO 有效。可能对安装过程有用。
【讨论】:
fiel_get_contents() 如果 PATH_INFO 被禁用并且您在 check.php 之后附加了一个额外的段,则似乎失败并返回 404 或 500。 这可能只是我的设置,但我似乎也无法捕捉到错误,或者我只是将其用作未启用的标志。 在 file_get_contents 中添加 @ 会抑制错误,结果为 false,所以现在我要这样做。【参考方案2】:$_SERVER["PATH_INFO"] 应该始终可用。如果不是,则表示文件名和查询字符串之间没有额外的信息。
【讨论】:
没错。 “只有映射到存在的文字路径的请求才会被接受。因此,在上例中的真实文件名(例如 /test/here.html/more)之后带有尾随路径名信息的请求将返回 404 NOT FOUND 错误。 "如果 AcceptPathInfo 关闭,则脚本不会执行。 (对吧?) 正确和好点,但 OP 的问题是他们是否可以 检测AcceptPathInfo on
,不是吗?大概是为了一些安装程序或其他东西。
虽然您的解决方案实际上可能更好。谁知道 lighttpd 和其他服务器如何处理路径信息?
@Pekka,是的,你是对的。这个问题比看起来更复杂。
是的,安装过程是一个用例。生成 URL 是另一回事。如果 url 是 'path/to/file',应该是 'script.php/path/to/file' 还是 'script.php?path=path/to/file'。以上是关于如果在您的服务器上启用了 PATH_INFO,请检查 PHP?的主要内容,如果未能解决你的问题,请参考以下文章
要启用扩展,请确认它们已在您的 .ini 文件中启用 - 使用 XAMPP 的 Windows
javascript 内联JavaScript未启用。它是否设置在您的选项中?