Muy a menudo intentaré ejecutar un script PHP y volveré a tener una pantalla en blanco. No hay mensaje de error; Solo una pantalla vacía. La causa podría haber sido un simple error de sintaxis (corchete incorrecto, punto y coma faltante), o una llamada de función fallida, o algo completamente diferente.
Es muy difícil descubrir qué salió mal. Termino comentando el código, ingresando declaraciones de "eco" en todas partes, etc., tratando de reducir el problema. Pero seguramente debe haber una mejor manera, ¿verdad?
¿Hay alguna manera de hacer que PHP produzca un mensaje de error útil, como lo hace Java?
php
debugging
error-handling
Candidasa
fuente
fuente
T_PAAMAYIM_NEKUDOTAYIM
. O tal vez "debe ser una instancia de entero, entero dado" .Respuestas:
Para errores de sintaxis, debe habilitar la visualización de errores en php.ini. De forma predeterminada, están desactivados porque no desea que un "cliente" vea los mensajes de error. Consulte esta página en la documentación de PHP para obtener información sobre las 2 directivas:
error_reporting
ydisplay_errors
.display_errors
es probablemente el que quieres cambiar. Si no puede modificar el php.ini, también puede agregar las siguientes líneas a un archivo .htaccess:Es posible que desee considerar el uso del valor de E_ALL (como lo menciona Gumbo) para su versión de PHP para
error_reporting
obtener todos los errores. más informaciónOtros 3 elementos: (1) Puede verificar el archivo de registro de errores, ya que tendrá todos los errores (a menos que se haya deshabilitado el registro). (2) Agregar las siguientes 2 líneas lo ayudará a depurar errores que no son errores de sintaxis:
(3) Otra opción es usar un editor que verifique si hay errores al escribir, como PhpEd . PhpEd también viene con un depurador que puede proporcionar información más detallada. (El depurador de PhpEd es muy similar a xdebug y se integra directamente en el editor para que use 1 programa para hacer todo).
El enlace de Cartman también es muy bueno: http://www.ibm.com/developerworks/library/os-debug/
fuente
E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE
. Ver docs.php.net/manual/en/errorfunc.constants.phpLo siguiente habilita todos los errores:
Ver también los siguientes enlaces
fuente
ini_set
es una cadena.El siguiente código debe mostrar todos los errores:
La única forma de generar una página en blanco con este código es cuando tiene un error en el controlador de apagado. Copié y pegué esto desde mi propio cms sin probarlo, pero estoy seguro de que funciona.
fuente
ShutdownHandler
anterior. Básicamente, este es un truco provisional en lugar del manejo adecuado de errores.E_NOTICE
errores en esta función?Los errores y advertencias generalmente aparecen en la configuración de php.ini
....\logs\php_error.log
o....\logs\apache_error.log
dependen de ella.También los errores útiles a menudo se dirigen al navegador, pero como no son html válidos, no se muestran.
Entonces,
"tail -f
"sus archivos de registro y cuando obtenga una pantalla en blanco use las opciones de menú" ver "->" fuente "de IEs para ver la salida sin formato.fuente
php_flag display_errors 1
él.Puede incluir las siguientes líneas en el archivo que desea depurar:
Esto anula la configuración predeterminada en php.ini, que solo hace que PHP informe los errores al registro.
fuente
Configuración PHP
2 entradas en php.ini dictan la salida de errores:
display_errors
error_reporting
En producción ,
display_errors
generalmente se establece enOff
(¡Lo cual es bueno, porque la visualización de errores en los sitios de producción generalmente no es deseable!).Sin embargo, en desarrollo , debe establecerse en
On
, para que se muestren los errores. Cheque !error_reporting
(a partir de PHP 5.3) está configurado de forma predeterminada enE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(lo que significa que todo se muestra, excepto avisos, estándares estrictos y avisos de desaprobación). En caso de duda, configúreloE_ALL
para mostrar todos los errores. Cheque !¡Whoa Whoa! ¡Sin verificación! ¡No puedo cambiar mi php.ini!
Es una pena. Por lo general, los hosts compartidos no permiten la alteración de su archivo php.ini, por lo que, lamentablemente, esa opción no está disponible. Pero no temas! Tenemos otras opciones !
Configuración de tiempo de ejecución
¡En el script deseado, podemos alterar las entradas php.ini en tiempo de ejecución! Es decir, se ejecutará cuando se ejecute el script. ¡Dulce!
¡Estas dos líneas harán el mismo efecto que alterar las entradas de php.ini como arriba! ¡Increíble!
¡Todavía recibo una página en blanco / 500 error!
¡Eso significa que el script ni siquiera se había ejecutado! ¡Eso generalmente sucede cuando tienes un error de sintaxis!
Con errores de sintaxis, el script ni siquiera llega al tiempo de ejecución. Falla en el momento de la compilación , lo que significa que usará los valores en php.ini, que si no hubiera cambiado, podría no permitir la visualización de errores.
Registros de errores
Además, PHP por defecto registra errores. En el alojamiento compartido, puede estar en una carpeta dedicada o en la misma carpeta que el script ofensivo.
Si tiene acceso a php.ini, puede encontrarlo debajo de la
error_log
entrada.fuente
Existe una extensión realmente útil llamada " xdebug " que también hará que sus informes sean mucho más agradables.
fuente
Siempre estoy usando esta sintaxis en la parte superior del script php.
fuente
Para una solución de problemas rápida y práctica, normalmente sugiero aquí en SO:
para ser puesto al comienzo del guión que está bajo resolución de problemas. Esto no es perfecto, la variante perfecta es que también habilita eso en
php.ini
y que registra los errores en PHP para detectar errores de sintaxis y de inicio.La configuración descrita aquí muestra todos los errores, avisos y advertencias, incluidos los estrictos, independientemente de la versión de PHP.
Lo siguiente a considerar:
Ver también:
error_reporting()
Docsdisplay_errors
Docsfuente
Es posible registrar un enlace para hacer visible el último error o advertencia.
agregar este código al comienzo de tu index.php te ayudará a depurar los problemas.
fuente
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 usarini_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 yerror_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 suapache.conf
ohttpd.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
yerror_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 parezcaini_set('display_errors', 1);
oerror_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 ...
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 hadisplay_errors
apagadoMuchas 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 suini_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.fuente
Si eres súper genial, puedes probar:
Esto solo mostrará errores cuando esté ejecutando localmente. También le proporciona la variable test_server para usar en otros lugares, según corresponda.
No se detectarán los errores que ocurran antes de que se ejecute el script, pero para el 99% de los errores que cometo, eso no es un problema.
fuente
$_SERVER['REMOTE_HOST']
para verificar si el cliente es, bueno, usted.En la parte superior de la página, elija un parámetro
fuente
Para persistir en esto y hacerlo más cómodo, puede editar su archivo php.ini. Por lo general, se almacena en
/etc/php.ini
o/etc/php/php.ini
, pero más localesphp.ini
pueden sobrescribirlo, según las pautas de configuración de su proveedor de alojamiento. Verifique unphpinfo()
archivoLoaded Configuration File
en la parte superior, para asegurarse de cuál se carga al final.Busque display_errors en ese archivo. Debería haber solo 3 instancias, de las cuales 2 están comentadas.
Cambie la línea no comentada a:
fuente
No sé si ayudará, pero aquí hay una parte de mi archivo de configuración estándar para proyectos php. Tiendo a no depender demasiado de las configuraciones de apache, incluso en mi propio servidor.
Nunca tengo el problema de error que desaparece, por lo que tal vez algo aquí le dará una idea.
Editado para mostrar APPLICATON_LIVE
fuente
Además, puede obtener información más detallada con xdebug .
fuente
Recomiendo Nette Tracy para una mejor visualización de errores y excepciones en PHP:
fuente
fuente
Y active los errores de visualización en php.ini
fuente
Puede registrar su propio controlador de errores en PHP. Volcar todos los errores en un archivo podría ayudarlo en estos casos oscuros, por ejemplo. Tenga en cuenta que se llamará a su función, sin importar a qué se haya configurado su informe de error actual . Ejemplo muy básico:
fuente
Las dos líneas clave que necesita para obtener errores útiles de PHP son:
Como señalaron otros colaboradores, estos están desactivados por defecto por razones de seguridad. Como un consejo útil: cuando configura su sitio, es útil hacer un cambio para sus diferentes entornos para que estos errores estén activados de forma predeterminada en sus entornos locales y de desarrollo. Esto se puede lograr con el siguiente código (idealmente en su archivo index.php o config para que esté activo desde el principio):
fuente
FirePHP también puede ser útil.
fuente
abra su php.ini, asegúrese de que esté configurado en:
reinicie su servidor.
fuente
También es posible que desee probar PHPStorm como su editor de código. Encontrará muchos errores de sintaxis PHP y otros justo mientras está escribiendo en el editor.
fuente
si eres un usuario de ubuntu, ve a tu terminal y ejecuta este comando
donde mostrará 50 errores recientes. Hay un archivo de error
error.log
para apache2 que registra todos los errores.fuente
Para activar el informe completo de errores, agregue esto a su script:
Esto hace que aparezcan incluso advertencias mínimas. Y, por si acaso:
Forzará la visualización de errores. Esto debería desactivarse en los servidores de producción, pero no cuando se está desarrollando.
fuente
Los "ERRORES" son las cosas más útiles para que los desarrolladores conozcan sus errores y los resuelvan para que el sistema funcione a la perfección.
PHP proporciona algunas de las mejores formas de conocer a los desarrolladores por qué y dónde su código obtiene los errores, por lo que al conocer esos errores, los desarrolladores pueden mejorar su código de muchas maneras.
Las mejores formas de escribir siguiendo dos líneas en la parte superior del script para obtener todos los mensajes de error:
Otra forma de usar herramientas de depuración como xdebug en su IDE.
fuente
Puede habilitar el informe completo de errores (incluidos avisos y mensajes estrictos). Algunas personas encuentran esto demasiado detallado, pero vale la pena intentarlo. Establecer
error_reporting
aE_ALL | E_STRICT
en su php.ini.E_STRICT
le notificará sobre las funciones obsoletas y le dará recomendaciones sobre los mejores métodos para realizar ciertas tareas.Si no desea avisos, pero encuentra útiles otros tipos de mensajes, intente excluir avisos:
También asegúrese de que
display_errors
esté habilitado en php.ini. Si su versión de PHP es anterior a 5.2.4, configúrela enOn
:Si su versión es 5.2.4 o posterior, use:
fuente
Además de error_reporting y la configuración ini display_errors, puede obtener errores SYNTAX de los archivos de registro de su servidor web. Cuando desarrollo PHP, cargo los registros del servidor web de mi sistema de desarrollo en mi editor. Cada vez que pruebo una página y obtengo una pantalla en blanco, el archivo de registro se vuelve obsoleto y mi editor me pregunta si quiero volver a cargarlo. Cuando lo hago, salto al fondo y aparece el error de sintaxis. Por ejemplo:
fuente
Para aquellos que usan nginx y tienen una pantalla en blanco incluso para archivos con
<?php echo 123;
. En mi caso, no tenía esta opción requerida para PHP en el archivo de configuración nginx:Esta opción no estaba en el archivo fastcgi_params, por lo que PHP no funcionó y no hubo ningún error en los registros.
fuente