AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 123317
Accepted
Álvaro González
Álvaro González
Asked: 2010-03-18 02:37:25 +0800 CST2010-03-18 02:37:25 +0800 CST 2010-03-18 02:37:25 +0800 CST

带有重音字母的路径中的 Apache + PHP

  • 772

如果 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>
  • 如果我将文件保存在 ANSI (Windows-1252) 中,则会出现语法错误:DocumentRoot must be a directory
  • 如果我以 Unicode (UTF-16) 格式保存文件,我会收到另一个语法错误:无效命令 '\xff\xfe#',可能拼写错误或由未包含在服务器配置中的模块定义(看起来它在抱怨 BOM)
  • 如果我将文件保存在无 BOM 的 UTF-8 中,Apache 工作正常,并且它提供静态文件而没有明显问题......

...但是,加载任何 *.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 的目录短名称(只是一个测试,我不想使用这样的变通方法):

<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 或创建 NTFS 连接来隐藏实际名称),但我不敢相信这是无法做到的。你有关于这个主题的更多信息吗?

我的规格包括作为 Apache 模块运行的 32 位 Windows XP Professional SP3、Apache/2.2.13 和 PHP/5.2.11(但我在另一个使用 Windows Vista 和 PHP/5.3.1 的盒子中注意到了同样的问题)。

更新

我正在使用 NTFS,Windows 代码页是 Win-1252(它是 Windows 的西班牙语言版本)。也许它是相关的:-?

更新#2

我说我没有遇到 PHP 包含或需要、include_path 或任何其他 PHP 代码的问题。我的问题是 PHP 解释器不会找到 PHP 脚本本身,即使它是带有 *.php 扩展名的静态 HTML 文档。

更新#3

进一步阅读,PHP 似乎没有使用 Windows API 提供的双字节函数。除非我弄错了,否则这似乎证明了我想做的事情是不可能的。

windows php apache-2.2 php5
  • 2 2 个回答
  • 2562 Views

2 个回答

  • Voted
  1. Best Answer
    Bigue Nique
    2011-02-27T21:17:57+08:002011-02-27T21:17:57+08:00

    似乎 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
    

    Link Shell Extension 是一个免费软件,它与 Windows shell 集成以管理 NTFS 卷上的符号链接(您可以在上面的 Wikipedia 文章中找到该链接,或者您可以在任何好的搜索引擎上查找“Link Shell Extension”)。

    • 5
  2. Andy
    2010-03-18T04:22:48+08:002010-03-18T04:22:48+08:00

    Apache/2.2.8在英国和PHP/5.2.5英国都可以正常工作,以/ /require()编码。ANSIUTF-8UTF-8 +BOM

    我刚刚从该页面复制了您的示例 ( E:/gonzález/),创建了测试脚本 ( ANSI,工作正常),然后测试了各种编码。也许您可以尝试相同的方法?

    • 1

相关问题

  • 您最喜欢的云计算提供商是什么?[关闭]

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve