如果在您的服务器上启用了 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?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上启用 Fabric

要启用扩展,请确认它们已在您的 .ini 文件中启用 - 使用 XAMPP 的 Windows

javascript 内联JavaScript未启用。它是否设置在您的选项中?

如果没有在您的应用程序服务器上运行,为什么要使用Redis?

Postman中文文档——同步

如何在 PHP 中启用 Socket?