如果DOCUMENT_ROOT的path包含重音符号,我无法在Windows XP下的Apache下运行支持PHP的网站。 我不是指脚本文件名称本身,而是指path组件中的任何文件夹。
我有这个虚拟主机定义:
<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>
…但是,加载任何* .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
我决定尝试目录的8 + 3短名称(只是一个testing,我不想使用这样的解决方法):
<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>
但是我得到了同样的行为:
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
虽然有明显的解决方法(在所有目录名称中使用普通的ASCII或创buildNTFS路口隐藏实际名称),我不能相信这是不能做到的。 你有关于这个问题的更多信息吗?
我的规格包括32位Windows XP专业版SP3,Apache / 2.2.13和PHP / 5.2.11作为Apache模块运行(但我注意到与Windows Vista和PHP / 5.3.1的另一个盒子相同的问题)。
我使用NTFS和Windows代码页是Win-1252(这是Windows的西class牙语版本)。 也许这是相关的: – ?
我说我没有用PHP包含或需要,include_path或任何其他PHP代码段的问题。 我的问题是PHP解释器不会自己findPHP脚本,即使它是一个带* .php扩展名的静态HTML文档。
进一步阅读后,似乎PHP不使用Windows API提供的双字节函数 。 除非我弄错了,这似乎certificate我想做的事情是不可能的。
似乎Apache在将它传递给以UTF-8编码的PHP之前,解决了它长版本的path。 PHP文件函数使用Windows的ANSI API,无法处理文件名中的Unicode。
我记得面对Apache / PHP的类似问题。 一种解决scheme是使用一个完全避免Unicode字符的名称来创build某种types的NTFS符号链接到您的文件夹。
例如:E:\ sites => E:\gonzález\ sites
维基百科上的NTFS符号链接: http : //en.wikipedia.org/wiki/NTFS_symbolic_link
您可以从Microsoft获取mklink.exe实用程序以从命令行创build此类链接: http ://technet.microsoft.com/en-us/library/cc753194(WS.10) .aspx
你可以尝试下面的命令:
mklink /DE:\sites E:\gonzález\sites
链接shell扩展是一个免费软件,与Windowsshell集成来pipe理NTFS卷上的符号链接(您可以在上面的维基百科文章中find链接,或者您可以在任何优秀的search引擎上查找“链接shell扩展”)。
在英国使用Apache/2.2.8和PHP/5.2.5 , require()编码为ANSI / UTF-8 / UTF-8 +BOM 。
我刚刚从这个页面复制了你的例子( E:/gonzález/ ),创build了testing脚本( ANSI ,工作正常),然后testing了各种编码。 也许你可以尝试相同的方法?