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.