¿Cómo consigo errores de PHP para mostrar?




mostrar errores php mysql (20)

He revisado mi archivo PHP ini y se muestran los errores de visualización y también el informe de errores es E_ALL . He reiniciado mi servidor web Apache.

Incluso he puesto estas líneas en la parte superior de mi script, y ni siquiera detecta errores simples de análisis. Por ejemplo, declaro variables con un "$" y no cierro sentencias ";" . Pero todos mis scripts muestran una página en blanco sobre estos errores, pero quiero ver realmente los errores en la salida de mi navegador.

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

¿Que más queda por hacer?


Para mostrar todos los errores necesitas:

1. Tenga estas líneas en el script PHP al que está llamando desde el navegador (normalmente index.php ):

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

2. (a) Asegúrese de que este script no tenga errores de sintaxis

-o-

2. (b) Establezca display_errors = On en su php.ini

De lo contrario, ni siquiera puede ejecutar esas 2 líneas!

Puede verificar los errores de sintaxis en su script ejecutando (en la línea de comandos):

php -l index.php

Si incluye el script de otro script PHP, se mostrarán los errores de sintaxis en el script incluido . Por ejemplo:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser

Como ahora estamos ejecutando PHP7, las respuestas aquí dadas ya no son correctas. El único que todavía está bien es el de Frank Forte, ya que habla sobre PHP7. Por otro lado, en lugar de intentar detectar un error con un try / catch, puedes usar un truco: use include. Aquí 3 piezas de código:

Archivo: tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  

Ejecutar esto en PHP7 no mostrará nada

Ahora, intente esto:

Archivo: tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?> 

Archivo: tst3.php

<?php
// Missing " and ;
echo "Testing
?>  

Ahora ejecute tst2 que establece el informe de errores y luego incluya tst3. Ya verás:

Error de análisis: error de sintaxis, final inesperado del archivo, variable esperada (T_VARIABLE) o $ {(T_DOLLAR_OPEN_CURLY_BRACES) o {$ (T_CURLY_OPEN) en tst3.php en la línea 4


Esto funcionará:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

Normalmente iría con el siguiente código en mi proyecto de PHP simple que es muy pequeño, si el proyecto crece, entonces lo recomendaré.

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT','DEVELOPMENT');
}

$base_url   =   null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url   =   'http://localhost/product/';
            ini_set('display_errors',1);
            ini_set('display_startup_errors',1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url   =   'Prod url'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

Espero que esto ayude.


Puedes hacer algo como a continuación:

Establezca los siguientes parámetros en su archivo de índice principal

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

Luego, en función de sus requisitos, puede elegir lo que desea mostrar:

Para todo error, advertencia y aviso

    error_reporting(E_ALL); OR error_reporting(-1);

Para todos los errores

    error_reporting(E_ERROR);

Para todas las advertencias

    error_reporting(E_WARNING);

Para todos los avisos

    error_reporting(E_NOTICE);

Para más información ver here


Dentro de su php.ini :

display_errors = on

Luego reinicie su servidor web.


<?php
// Turn off error reporting
error_reporting(0);

// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Report all errors
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?

>

Mientras su sitio está activo, el archivo php.ini debe tener deshabilitados los desencadenadores de pantalla por razones de seguridad. Sin embargo, para el entorno de desarrollo, display_errors puede habilitarse para la resolución de problemas.


Establece esto en tu index.php

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

Aquí hay un script PHP:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

Para obtener una explicación más detallada de los errores de PHP, visite Error de PHP - error_reporting () .


Puede agregar su propio controlador de errores personalizado, que puede proporcionar información de depuración adicional. Además puedes configurarlo para que te envíe por correo electrónico.

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");

No puede detectar errores de análisis al habilitar la salida de errores en el tiempo de ejecución, ya que analiza el archivo antes de ejecutar realmente cualquier cosa (y dado que encuentra un error durante esto, no ejecutará nada). Deberá cambiar la configuración real del servidor para que display_errors esté activado y se utilice el nivel de error_reporting adecuado. Si no tiene acceso a php.ini, puede usar .htaccess o similar, dependiendo del servidor.

Esta pregunta puede proporcionar información adicional.


Esto siempre funciona para mí:

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

Sin embargo, esto no hace que PHP muestre los errores de análisis, la única forma de mostrar esos errores es modificar su php.ini con esta línea:

display_errors = on

Algunos proveedores de alojamiento web le permiten cambiar los parámetros de PHP en el archivo .htaccess .

Puedes añadir la siguiente línea:

php_value display_errors 1

Tuve el mismo problema que el tuyo y esta solución lo solucionó.


Cree un archivo llamado php.ini en la carpeta donde reside su archivo PHP.

Dentro de php.ini agregue el siguiente código (estoy dando un error simple que muestra el código):

display_errors = on

display_startup_errors = on

Eso es lo que aprendí. En el archivo PHP.INI

error_reporting = E_ALL
display_errors = On

Este código en la parte superior debería funcionar error_reporting (E_ALL);

Sin embargo intente editar el código en el teléfono en el archivo

error_reporting = on


La solución mejor / fácil / rápida que puede usar si se trata de una depuración rápida, es rodear su código con excepciones de captura. Eso es lo que estoy haciendo cuando quiero comprobar algo rápido en la producción.

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

Espero que esto ayude.


Si tiene instalado xdebug, puede anular cada configuración configurando:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

Escriba: int, Valor predeterminado: 0, Introducido en Xdebug> = 2.3 Si esta configuración se establece en 1, siempre se mostrarán los errores, independientemente de la configuración de display_errors de PHP.

force_error_reporting

Escriba: int, Valor predeterminado: 0, Introducido en Xdebug> = 2.3 Esta configuración es una máscara de bits, como error_reporting. Esta máscara de bits se ORIFICARÁ lógicamente con la máscara de bits representada por error_reporting para determinar qué errores deben mostrarse. Esta configuración solo se puede realizar en php.ini y le permite forzar que se muestren ciertos errores sin importar lo que una aplicación haga con ini_set ().


Utilizar:

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

Esta es la mejor manera de escribirlo, pero un error de sintaxis da un resultado en blanco, así que use la consola para verificar los errores de sintaxis. La mejor manera de depurar el código PHP es usar la consola; Ejecuta lo siguiente:

php -l phpfilename.php

Solo escribe:

error_reporting(-1);




error-reporting