Não consigo executar um site com PHP ativado no Apache no Windows XP se o caminho para DOCUMENT_ROOT contiver letras acentuadas. Não estou me referindo aos próprios nomes dos arquivos de script, mas a qualquer pasta nos componentes do caminho.
Eu tenho essa definição de host virtual:
<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>
- Se eu salvar o arquivo em ANSI, recebo um erro de sintaxe: DocumentRoot deve ser um diretório
- Se eu salvar o arquivo em Unicode, recebo outro erro de sintaxe: Comando inválido '\ xff \ xfe #', talvez escrito incorretamente ou definido por um módulo não incluído na configuração do servidor (parece que é reclamando sobre o BOM)
- Se eu salvar o arquivo no UTF-8 sem BOM, o Apache funciona bem e ele exibe arquivos estáticos sem nenhum problema aparente ...
... no entanto, reclamações do PHP ao carregar qualquer arquivo * .php (mesmo que vazio):
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
Eu decidi experimentar o nome abreviado 8 + 3 do diretório (apenas um teste, não quero usar essa solução alternativa):
<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>
Mas obtenho o mesmo comportamento:
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
Embora existam soluções óbvias (use ASCII simples em todos os nomes de diretório ou crie junções NTFS para ocultar nomes reais), não posso acreditar que isso não possa ser feito. Você tem mais informações sobre o assunto?
Minhas especificações incluem Windows XP Professional SP3 de 32 bits, Apache / 2.2.13 e PHP / 5.2.11 executando como módulo do Apache (mas notei o mesmo problema em outra caixa com o Windows Vista e PHP / 5.3.1) .
Atualizar
Estou usando o NTFS e a página de códigos do Windows é Win-1252 (é uma versão em espanhol do Windows). Talvez seja relevante: -
Atualização nº 2
Eu observo que não estou tendo problemas com o PHP inclui ou requer, include_path ou qualquer outro código PHP. Meu problema é que o interpretador PHP não encontrará o próprio script PHP, mesmo que seja um documento HTML estático com a extensão * .php.
Atualização 3
Após a leitura, aparece o PHP não use as funções de byte duplo fornecidas pela API do Windows . A menos que eu tenha entendido errado, isso parece provar que o que eu quero fazer é simplesmente impossível.