【发布时间】:2013-08-25 02:53:43
【问题描述】:
短版: PHP(或 Apache??)将“C:”附加到所有相关 URL 的开头。我怎样才能让它停止这样做?
详情: 我正在尝试在 Windows Vista 上手动设置 AMP 堆栈。这仅供我的家庭网络内部使用。
我已经安装了 Apache 2.2、MySQL 和 PHP 5.4。一切都很好,除了 PHP 将“C:”附加到每个 URL 的开头。例如,即使调用 php_info() 表明 php 正在将“C:”添加到 SCRIPT_PATH 和 PHP_SELF 的开头。尽管DOCUMENT_ROOT 变量是正确的(C:\Apache2\htdocs):
来自 PHP 变量部分:
Variable Value
------------------------ ---------------
_SERVER["REQUEST_URI"] /test.php
_SERVER["SCRIPT_PATH"] C:/test.php
_SERVER["PHP_SELF"] C:/test.php
_SERVER["DOCUMENT_ROOT"] C:/Apache2/htdocs
我需要在 php.ini 中更改一些设置来纠正这个问题吗?它完全搞砸了链接,以至于我在我的 Apache 日志中收到很多这样的错误消息:
[error] [client 10.0.0.4] (20023)The given path was above the root path: Cannot map GET /C:/<rest of the actual path>
我已将 php.ini 和 Apache httpd.conf 与笔记本电脑上的 XAMPP 安装的相同文件(没有此问题)进行了比较,但我看不出任何似乎会导致此类问题的差异现象。
Apache 2.4 + PHP 5.5(均使用 VC11 编译)和 Apache 2.2 + PHP 5.4(均使用 VC9 编译)均出现此问题。
【问题讨论】:
-
这些变量应该包含本地文件名,而不是 URL。您的文件在不同的驱动器上吗?
-
@Barmar 不,它们都在同一个驱动器上。它们在“C:\Apache2\htdocs”中,而不是 C: 的根目录
-
你可以试试
var_dump($_SERVER["DOCUMENT_ROOT"]),只是放弃它不包含前导不可见字符。