Álv*_*lez 4 windows php php5 apache-2.2
如果 DOCUMENT_ROOT 的路径包含重音字母,我将无法在 Windows XP 上的 Apache 下运行支持 PHP 的网站。我不是指脚本文件名本身,而是指路径组件中的任何文件夹。
我有这个虚拟主机定义:
<VirtualHost *:80>
ServerName foo.local
DocumentRoot "E:/gonzález/sites/foo"
ErrorLog logs/foo.local-error.log
CustomLog logs/foo.local-access.log combined
<Directory "E:/gonzález/sites/foo">
AllowOverride All
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
...然而,加载任何 *.php 文件(甚至是空文件)时,PHP 会抱怨:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'E:/gonzález/sites/foo/vacio.php' (include_path='.;C:\Archivos de programa\PHP\pear') in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
我决定试试目录的 8+3 短名称(只是一个测试,我不想使用这样的解决方法):
<VirtualHost *:80>
ServerName foo.local
DocumentRoot "E:/GONZLE~1/sites/foo"
ErrorLog logs/foo.local-error.log
CustomLog logs/foo.local-access.log combined
<Directory "E:/GONZLE~1/sites/foo">
AllowOverride All
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但我得到了相同的行为:
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'E:/gonzález/sites/foo/vacio.php' (include_path='.;C:\Archivos de programa\PHP\pear') in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
虽然有明显的解决方法(在所有目录名称中使用纯 ASCII 或创建 NTFS 连接以隐藏实际名称),但我无法相信这无法完成。你有关于这个主题的更多信息吗?
我的规格包括 32 位 Windows XP Professional SP3、Apache/2.2.13 和 PHP/5.2.11 作为 Apache 模块运行(但我在另一个装有 Windows Vista 和 PHP/5.3.1 的盒子中注意到了同样的问题)。
我使用的是 NTFS,Windows 代码页是 Win-1252(它是 Windows 的西班牙语语言版本)。也许它是相关的:-?
我注意到我在使用 PHP 包含或需要、include_path 或任何其他 PHP 代码时没有问题。我的问题是 PHP 解释器不会找到 PHP 脚本本身,即使它是带有 *.php 扩展名的静态 HTML 文档。
进一步阅读后,PHP 似乎没有使用 Windows API 提供的双字节函数。除非我弄错了,这似乎证明我想做的事情是不可能的。
小智 5
似乎Apache在将其传递给以UTF-8编码的PHP之前解析了它的长版本的路径。PHP 文件函数使用 Windows 的 ANSI API,无法处理文件名中的 Unicode。
我记得在使用 Apache/PHP 时遇到过类似的问题。一种解决方案是使用完全避免 Unicode 字符的名称创建某种指向您的文件夹的 NTFS 符号链接。
例如:E:\sites => E:\gonzález\sites
维基百科上的 NTFS 符号链接:http : //en.wikipedia.org/wiki/NTFS_symbolic_link
您可以从 Microsoft 获取 mklink.exe 实用程序以从命令行创建此类链接:http ://technet.microsoft.com/en-us/library/cc753194(WS.10) .aspx
你可以试试下面的命令:
mklink /D E:\sites E:\gonzález\sites
Run Code Online (Sandbox Code Playgroud)
Link Shell Extension 是一款与 Windows shell 集成的免费软件,用于管理 NTFS 卷上的符号链接(您可以在上面的维基百科文章中找到链接,或者您可以在任何好的搜索引擎上查找“Link Shell Extension”)。