¿Cómo puedo obtener mensajes de error útiles en PHP?

583

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?

Candidasa
fuente
2
Consulte también stackoverflow.com/q/1475297/632951
Pacerier el
44
@JuannStrauss, eso es entenderlo. Y cuando finalmente ves los errores, dice T_PAAMAYIM_NEKUDOTAYIM. O tal vez "debe ser una instancia de entero, entero dado" .
Pacerier
1
Tutorial sobre esto: code2real.blogspot.com/2015/06/…
Alumno

Respuestas:

498

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_reportingy display_errors. display_errorses probablemente el que quieres cambiar. Si no puede modificar el php.ini, también puede agregar las siguientes líneas a un archivo .htaccess:

php_flag  display_errors        on
php_value error_reporting       2039

Es posible que desee considerar el uso del valor de E_ALL (como lo menciona Gumbo) para su versión de PHP para error_reportingobtener todos los errores. más información

Otros 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:

error_reporting(-1);
ini_set('display_errors', 'On');

(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/

Darryl Hein
fuente
25
2039 es el valor de 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.php
Gumbo
Me gusta la opción del archivo .htaccess. Me ayuda a depurar en un área que no es parte del sitio web público. Muchas gracias por este consejo!
jacekn
1
Agregaría que los errores de registro al archivo (y buscarlos allí) es la mejor solución. No confíe en mostrar errores en la página: pueden arruinarlo, puede olvidarse de activar el informe de errores para el sitio de producción y esto le causará problemas en el futuro
Ivan Yarych
455

Lo siguiente habilita todos los errores:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

Ver también los siguientes enlaces

Eljakim
fuente
28
Lo mejor es hacer estos cambios a nivel de archivo .ini. Activar el informe de errores desde un script es inútil, ya que no ayudará con los errores de sintaxis u otros errores fatales que maten la fase de compilación. El script se elimina mucho antes de que comience a ejecutarse y llegue a las anulaciones de informes.
Marc B
Estás en lo cierto. No noté que la mudanza es a su propio servidor.
Eljakim
66
Ejecute phpinfo () para encontrar el archivo php.ini correcto. Busque la línea del archivo de configuración cargado .
borrible el
1
Si está buscando errores que ocurran durante la fase de compilación, revise los registros de apache que a menudo se encuentran en /var/log/apache2/error.log
csi
1
Esta respuesta fallará en php7 cuando la escritura estricta esté habilitada, porque el segundo parámetro de ini_setes una cadena.
PeeHaa
175

El siguiente código debe mostrar todos los errores:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

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.

m4dm4x1337
fuente
44
Me sale una página en blanco de ese código. ¿Qué quiere decir con "tiene un error en el controlador de apagado" y qué debo hacer para resolver el problema?
Paolo M
@PaoloM, está diciendo un error en la función ShutdownHandleranterior. Básicamente, este es un truco provisional en lugar del manejo adecuado de errores.
Pacerier
Gracias, fue útil, pero ¿cómo puedo desactivar los E_NOTICEerrores en esta función?
MajAfy
Esta es la solución correcta, pero tenga cuidado con la divulgación de información cuando se produce un error ... (prefiera iniciar sesión en lugar de hacer eco a los usuarios)
Sam Jason Braddock
1
Estoy usando esto cuando Symfony no puede detectar correctamente errores fatales.
Bobina
61

Los errores y advertencias generalmente aparecen en la configuración de php.ini ....\logs\php_error.logo ....\logs\apache_error.logdependen 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.

James Anderson
fuente
13
Lamentablemente, ver fuente de la página no muestra nada también.
Matthew Scharley
2
Los errores de análisis deben estar visibles en el registro de errores de Apache, independientemente de la configuración que tenga en cualquier otro lugar. Si no tiene control sobre el servidor, puede ser difícil obtener el registro de errores de apache, pero le sugiero que hable con su proveedor y hay formas de exponerle el registro de errores. Aparte de eso, solo puedo sugerir qué otros tienen: verifique su código para analizar errores en su servidor de desarrollo local antes de implementarlo en producción. Además, un IDE de validación como el PDT de Eclipse podría ser de gran ayuda.
Guss
55
Volviendo a esto, recientemente tuve un problema de desbordamiento de pila que no generaba ningún error, incluso en los registros y no se manifestó como tal hasta que instalé xdebug en el servidor. Gah
Matthew Scharley
Si no puede modificar php.ini, cree un archivo .htaccess con php_flag display_errors 1él.
Tom
59

Puede incluir las siguientes líneas en el archivo que desea depurar:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Esto anula la configuración predeterminada en php.ini, que solo hace que PHP informe los errores al registro.

Tomalak
fuente
2
Es verdad. En este caso, los valores deben establecerse directamente en el INI; para un entorno de desarrollo puro, esto puede ser preferible de todos modos.
Tomalak
53

Configuración PHP

2 entradas en php.ini dictan la salida de errores:

  1. display_errors
  2. error_reporting

En producción , display_errorsgeneralmente se establece en Off(¡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 en E_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úrelo E_ALLpara 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!

error_reporting(E_ALL);
ini_set("display_errors", "On");

¡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_logentrada.

El fantasma de Madara
fuente
30

Existe una extensión realmente útil llamada " xdebug " que también hará que sus informes sean mucho más agradables.

Gnarf
fuente
2
De hecho, esta es una herramienta de depuración muy útil: hace que los mensajes de error sean mucho más detallados, con rastros completos de la pila y volcados variables y todo.
hbw
2
Si. Y luego use algo como el complemento VimDebugger para recorrer su código y descubrir dónde sale mal.
Sander Marechal
1
NetBeans con xdebug aquí. Es tan impresionante. Soy nuevo en PHP (generalmente ASP.NET) y había estado emitiendo declaraciones de eco antes.
Algunos Canuck
30

Siempre estoy usando esta sintaxis en la parte superior del script php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off
FDisk
fuente
3
Lo siento, pero -1 por no leer las otras respuestas ya publicadas. Esto se soluciona en .htaccess como ya se mencionó varias veces.
Matthew Scharley
12
habitual "alojamiento gratuito" ignora el .htaccess
FDisk
27

Para una solución de problemas rápida y práctica, normalmente sugiero aquí en SO:

error_reporting(~0); ini_set('display_errors', 1);

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.iniy 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:

  • Instale Xdebug y habilite la depuración remota con su IDE.

Ver también:

hakre
fuente
27

Es posible registrar un enlace para hacer visible el último error o advertencia.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

agregar este código al comienzo de tu index.php te ayudará a depurar los problemas.

Eduardo Oliveira
fuente
1
Esto es oro puro para las personas que se quedaron atrapadas en webhosts que no muestra ningún error pero permite el acceso cero al registro
Rafael Mena Barreto
18

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_errorsconfiguración de PHP durante el tiempo de ejecución, (esto incluye cualquier cosa, desde usar ini_seten 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_errorsencendido y error_reportinglisto 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.iniarchivo o su apache.confo httpd.confo 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 = 1y error_reporting = -1en 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_errorsapagado

Muchas personas (y las instalaciones de stock de PHP) usarán un archivo ini de producción que se ha display_errorsdesactivado 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.

Jerife
fuente
17

Si eres súper genial, puedes probar:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

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.

Rich Bradshaw
fuente
2
Si está diferenciando entre entornos locales y de producción, simplemente debe habilitar o deshabilitar los errores de forma global (en su php.ini) y no en el código que también puede ser código de producción. Si necesita depurar un sitio web de producción en su entorno de producción y solo desea que pueda ver los errores, use $_SERVER['REMOTE_HOST']para verificar si el cliente es, bueno, usted.
Jaap Haagmans
17

En la parte superior de la página, elija un parámetro

error_reporting(E_ERROR | E_WARNING | E_PARSE);
Kld
fuente
16

Para persistir en esto y hacerlo más cómodo, puede editar su archivo php.ini. Por lo general, se almacena en /etc/php.inio /etc/php/php.ini, pero más locales php.inipueden sobrescribirlo, según las pautas de configuración de su proveedor de alojamiento. Verifique un phpinfo()archivo Loaded Configuration Fileen 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:

display_errors = stdout
RAM
fuente
16

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

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}
Eli
fuente
@Eli, esto tiene una sobrecarga de tiempo de ejecución, sin embargo, por solicitud de página .
Pacerier
hasta 1 para el concepto de que la configuración de depuración pasar por alto, sin embargo servidor está configurado, buen tiempo va a implementar o mantener (en desarrollo)
justnajm
15
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

Además, puede obtener información más detallada con xdebug .

Yan.Zero
fuente
Xdebug se puede habilitar desde php.ini
jewelhuq
15

Recomiendo Nette Tracy para una mejor visualización de errores y excepciones en PHP:

Captura de pantalla de Nette Tracy

Ondřej Šotek
fuente
3
Tracy se preocupa por la configuración adecuada de todos los errores de visualización y las opciones de informe de errores para proporcionar resultados en situaciones como las descritas en la publicación original ... Por lo tanto, esta herramienta es especialmente útil para dirigirse al autor de la pregunta "¿Alguien puede recomendar buenos consejos, herramientas y técnicas de depuración de PHP? ".
Jan Drábek
15
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Abuzer Firdousi
fuente
10
error_reporting(E_ALL | E_STRICT);

Y active los errores de visualización en php.ini

Ólafur Waage
fuente
9

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:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
soulmerge
fuente
7

Las dos líneas clave que necesita para obtener errores útiles de PHP son:

ini_set('display_errors',1);
 error_reporting(E_ALL);

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):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}
Síntesis de código
fuente
6

FirePHP también puede ser útil.

Rich Bradshaw
fuente
Debo señalar que FirePHP es un proyecto muerto ya que FireBug se integró en la consola de Firefox. ChromePHP es un poco el sucesor allí, pero no del todo.
Machavity
6

abra su php.ini, asegúrese de que esté configurado en:

display_errors = On

reinicie su servidor.

usuario577803
fuente
6

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.

user1681048
fuente
6

si eres un usuario de ubuntu, ve a tu terminal y ejecuta este comando

sudo tail -50f /var/log/apache2/error.log

donde mostrará 50 errores recientes. Hay un archivo de error error.logpara apache2 que registra todos los errores.

Ashutosh Jha
fuente
5

Para activar el informe completo de errores, agregue esto a su script:

error_reporting(E_ALL);

Esto hace que aparezcan incluso advertencias mínimas. Y, por si acaso:

ini_set('display_errors', '1');

Forzará la visualización de errores. Esto debería desactivarse en los servidores de producción, pero no cuando se está desarrollando.

Daniel Sorichetti
fuente
Al igual que con la respuesta de Tomalak, esto no funciona para los errores de sintaxis.
Darryl Hein
5

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:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Otra forma de usar herramientas de depuración como xdebug en su IDE.

Janyk
fuente
4

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_reportinga E_ALL | E_STRICTen su php.ini.

error_reporting = E_ALL | E_STRICT

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:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

También asegúrese de que display_errorsesté habilitado en php.ini. Si su versión de PHP es anterior a 5.2.4, configúrela en On:

display_errors = "On"

Si su versión es 5.2.4 o posterior, use:

display_errors = "stderr"
Ayman Hourieh
fuente
4

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:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
jmucchiello
fuente
3

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:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

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.

AVKurov
fuente
Tuve el mismo problema y se debe a que el archivo de configuración predeterminado de Nginx no tiene esa línea.
Salem