Este es un problema de configuración cargada frente a tiempo de ejecución
Es importante reconocer que se produce un error de sintaxis o error de análisis durante el paso de compilación o análisis , lo que significa que PHP se rescatará antes de que incluso haya tenido la oportunidad de ejecutar cualquiera de sus códigos. Entonces, si está modificando la display_errors
configuración de PHP durante el tiempo de ejecución, (esto incluye cualquier cosa, desde usar ini_set
en su código hasta usar .htaccess, que es un archivo de configuración de tiempo de ejecución), solo están en juego las configuraciones de configuración cargadas predeterminadas .
Cómo evitar siempre WSOD en el desarrollo
Para evitar una WSOD desea asegurarse de que su archivo de configuración cargada tiene display_errors
encendido y error_reporting
listo para -1
( este es el E_ALL equivalente, ya que garantiza que todos los bits están activados independientemente de la versión de PHP que se está ejecutando ). No codifique el valor constante de E_ALL, porque ese valor está sujeto a cambios entre diferentes versiones de PHP.
Configuración cargado deberá ser cargada a su php.ini
archivo o su apache.conf
o httpd.conf
o archivo de host virtual. Esos archivos solo se leen una vez durante la etapa de inicio (cuando se inicia por primera vez apache httpd o php-fpm, por ejemplo) y solo se anulan mediante cambios de configuración en tiempo de ejecución. Asegurarse de que, display_errors = 1
y error_reporting = -1
en su archivo de configuración cargado, se asegure de que nunca verá un WSOD, independientemente de la sintaxis o el error de análisis que ocurra antes de que un cambio en el tiempo de ejecución parezca ini_set('display_errors', 1);
o error_reporting(E_ALL);
pueda tener lugar.
Cómo encontrar sus archivos de configuración cargados (php.ini)
Para localizar los archivos de configuración cargados, simplemente cree un nuevo archivo PHP con solo el siguiente código ...
<?php
phpinfo();
Luego apunte su navegador allí y mire el Archivo de configuración cargado y los archivos .ini adicionales analizados , que generalmente están en la parte superior de su phpinfo()
e incluirán la ruta absoluta a todos sus archivos de configuración cargados.
Si ve en (none)
lugar del archivo, eso significa que no tiene un php.ini en la ruta del archivo de configuración (php.ini) . Por lo tanto, puede descargar el archivo php.ini de serie incluido con PHP desde aquí y copiarlo en la ruta del archivo de configuración como php.ini, luego asegúrese de que su usuario de php tenga permisos suficientes para leer ese archivo. Deberá reiniciar httpd o php-fpm para cargarlo. Recuerde, este es el archivo php.ini de desarrollo que viene incluido con la fuente PHP. ¡Así que por favor no lo uses en producción!
Simplemente no hagas esto en producción
Esta es realmente la mejor manera de evitar un WSOD en desarrollo. Cualquiera que sugiera que coloque ini_set('display_errors', 1);
o esté error_reporting(E_ALL);
en la parte superior de su script PHP o que use .htaccess como lo hizo aquí, no lo ayudará a evitar un WSOD cuando ocurra un error de sintaxis o análisis (como en su caso aquí) si su archivo de configuración cargado se ha display_errors
apagado
Muchas personas (y las instalaciones de stock de PHP) usarán un archivo ini de producción que se ha display_errors
desactivado de manera predeterminada, lo que generalmente resulta en la misma frustración que has experimentado aquí. Debido a que PHP ya lo tiene desactivado cuando se inicia, luego encuentra un error de sintaxis o análisis, y sale sin nada. Espera que su ini_set('display_errors',1);
parte superior de su script PHP lo haya evitado, pero no importará si PHP no puede analizar su código porque nunca habrá llegado al tiempo de ejecución.