mostrar mensajes log errores error activar php error-reporting

mensajes - mostrar errores php en iis



¿Cómo consigo errores de PHP para mostrar? (24)

Al usar PHP como un módulo de Apache, podemos cambiar la configuración utilizando las directivas de los archivos de configuración de Apache (por ejemplo, httpd.conf) y los archivos .htaccess. Necesitará los privilegios "Permitir anular" o "Permitir anular todo" para hacerlo.

Mira esto

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

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?


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ó.


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 () .


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


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


Dentro de su php.ini :

display_errors = on

Luego reinicie su servidor web.


Es posible que todas las configuraciones para "informes de errores" o "errores de visualización" no funcionen en PHP 7. Esto se debe a que el manejo de errores ha cambiado. Intenta esto en su lugar:

try{ // Your code } catch(Error $e) { $trace = $e->getTrace(); echo $e->getMessage().'' in ''.$e->getFile().'' on line ''.$e->getLine().'' called from ''.$trace[0][''file''].'' on line ''.$trace[0][''line'']; }

O, para detectar excepciones y errores de una sola vez (esto no es compatible con PHP 5):

try{ // Your code } catch(Throwable $e) { $trace = $e->getTrace(); echo $e->getMessage().'' in ''.$e->getFile().'' on line ''.$e->getLine().'' called from ''.$trace[0][''file''].'' on line ''.$trace[0][''line'']; }


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

error_reporting = E_ALL display_errors = On


Establece esto en tu index.php

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


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


Esto funcionará:

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


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


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.


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.


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.


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


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");


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


Si de alguna manera se encuentra en una situación en la que no puede modificar la configuración a través de php.ini o .htaccess no tiene suerte de mostrar errores cuando sus scripts PHP contienen errores de análisis. Entonces deberías resolver la alineación de los archivos en la línea de comandos de esta manera:

find . -name ''*.php'' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

Si su host está tan bloqueado que no permite cambiar el valor a través de php.ini o .htaccess , también puede rechazar el cambio del valor a través de ini_set . Puedes comprobarlo con el siguiente script PHP:

<?php if( !ini_set( ''display_errors'', 1 ) ) { echo "display_errors cannot be set."; } else { echo "changing display_errors via script is possible."; }


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 ().


Si, a pesar de seguir todas las respuestas anteriores (o no puede editar su archivo php.ini), aún no puede recibir un mensaje de error, intente crear un nuevo archivo PHP que permita la notificación de errores e incluya el archivo problemático. p.ej:

error_reporting(E_ALL); ini_set(''display_errors'', 1); require_once(''problem_file.php'');

A pesar de tener todo configurado correctamente en mi archivo php.ini , esta era la única forma en que podía detectar un error de espacio de nombres. Mi escenario exacto fue:

//file1.php namespace a/b; class x { ... } //file2.php namespace c/d; use c/d/x; //Dies because it''s not sure which ''x'' class to use class x { ... }


Solo escribe:

error_reporting(-1);


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


<?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.