Я не могу запустить веб-сайт с поддержкой PHP под Apache в Windows XP, если путь к DOCUMENT_ROOT содержит буквы с диакритическими знаками. Я имею в виду не сами имена файлов скриптов, а любую папку в компонентах пути.
У меня есть определение виртуального хоста:
<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 (просто тест, я не хочу использовать такой обходной путь):
<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-соединения, чтобы скрыть настоящие имена), я не могу поверить, что это невозможно. У вас есть дополнительная информация по теме?
Мои спецификации включают 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, даже если это статический HTML-документ с расширением * .php.
При дальнейшем чтении выясняется, что PHP не использует двухбайтовые функции, предоставляемые Windows API.. Если я не ошибся, это, кажется, доказывает, что то, что я хочу делать, просто невозможно.
Кажется, что Apache разрешает путь к своей длинной версии, прежде чем передать его PHP в кодировке UTF-8. Файловые функции PHP используют ANSI API Windows и не могут работать с Unicode в именах файлов.
Я помню, как столкнулся с аналогичной проблемой с Apache / PHP. Одним из решений было бы создать какую-то символическую ссылку NTFS на вашу папку, используя имя, которое полностью избегает символов Unicode.
например: E: \ sites => E: \ gonzález \ sites
Символическая ссылка NTFS в Википедии: http://en.wikipedia.org/wiki/NTFS_symbolic_link
Вы можете получить утилиту mklink.exe от Microsoft для создания таких ссылок из командной строки: http://technet.microsoft.com/en-us/library/cc753194(WS.10).aspx
Вы можете попробовать следующую команду:
mklink /D E:\sites E:\gonzález\sites
Link Shell Extension - это бесплатное программное обеспечение, которое интегрируется с оболочкой Windows для управления символическими ссылками на томах NTFS (вы найдете ссылку в статье Википедии выше, или вы можете найти «Link Shell Extension» в любой хорошей поисковой системе).
У меня отлично работает с Apache/2.2.8
и PHP/5.2.5
в Соединенном Королевстве, require()
закодировано в ANSI
/UTF-8
/UTF-8 +BOM
.
Я просто скопировал твой пример (E:/gonzález/
) с этой страницы, создал тестовый скрипт (ANSI
, работал нормально) затем протестировал различные кодировки. Может быть, вы могли бы попробовать тот же метод?