Este é um problema de configuração carregada versus tempo de execução
É importante reconhecer que um erro de sintaxe ou erro de análise ocorre durante a etapa de compilação ou análise , o que significa que o PHP será liberado antes mesmo que você tenha a chance de executar qualquer código. Portanto, se você estiver modificando a display_errors
configuração do PHP durante o tempo de execução (isso inclui tudo, desde usar ini_set
no seu código até usar .htaccess, que é um arquivo de configuração de tempo de execução), apenas as configurações padrão carregadas estão em jogo.
Como sempre evitar o WSOD no desenvolvimento
Para evitar um WSOD você quiser ter certeza de que o seu arquivo de configuração carregado tem display_errors
ligado e error_reporting
pronto para -1
( esta é a E_ALL equivalente porque garante que todos os bits são ligados independentemente de qual versão do PHP você está executando ). Não codifique o valor constante de E_ALL, porque esse valor está sujeito a alterações entre diferentes versões do PHP.
Configuração carregada ou é o seu carregado php.ini
arquivo ou seu apache.conf
ou httpd.conf
ou arquivo virtualhost. Esses arquivos são lidos apenas uma vez durante o estágio de inicialização (quando você inicia o apache httpd ou php-fpm, por exemplo) e são substituídos apenas pelas alterações na configuração do tempo de execução. Certifique-se de que, display_errors = 1
e error_reporting = -1
no seu arquivo de configuração carregado, você nunca verá um WSOD, independentemente da sintaxe ou do erro de análise que ocorrem antes que um tempo de execução seja alterado ini_set('display_errors', 1);
ou error_reporting(E_ALL);
possa ocorrer.
Como encontrar seus arquivos de configuração carregados (php.ini)
Para localizar o (s) arquivo (s) de configuração carregado (s), basta criar um novo arquivo PHP com apenas o seguinte código ...
<?php
phpinfo();
Em seguida, aponte o navegador para lá e observe os Arquivos de configuração carregados e os arquivos .ini adicionais analisados , que geralmente estão na parte superior do seu phpinfo()
e incluirão o caminho absoluto para todos os arquivos de configuração carregados.
Se você (none)
vir o arquivo, isso significa que você não tem um php.ini no caminho do arquivo de configuração (php.ini) . Portanto, você pode fazer o download do arquivo php.ini fornecido com o PHP a partir daqui e copiá-lo para o caminho do arquivo de configuração como php.ini, para garantir que o usuário do php tenha permissões suficientes para ler esse arquivo. Você precisará reiniciar o httpd ou php-fpm para carregá-lo. Lembre-se, este é o arquivo php.ini em desenvolvimento que vem junto com a fonte PHP. Então, por favor, não use em produção!
Só não faça isso na produção
Esta é realmente a melhor maneira de evitar um WSOD em desenvolvimento. Alguém sugerindo que você coloque ini_set('display_errors', 1);
ou error_reporting(E_ALL);
no topo do seu script PHP ou use .htaccess como você fez aqui, não ajudará a evitar um WSOD quando ocorrer um erro de sintaxe ou análise (como no seu caso aqui) se o seu arquivo de configuração carregado foi display_errors
desligado.
Muitas pessoas (e instalações de estoque do PHP) usarão um arquivo de produção-ini que foi display_errors
desativado por padrão, o que normalmente resulta na mesma frustração que você experimentou aqui. Como o PHP já o desativa quando é iniciado, ele encontra um erro de sintaxe ou de análise e falha com nada para produzir. Você espera que sua ini_set('display_errors',1);
parte superior do script PHP evite isso, mas não importa se o PHP não pode analisar seu código, porque nunca alcançou o tempo de execução.