El mejor tutorial de PHP tratamiento de errores en 2024. En este tutorial podrás aprender PHP tratamiento de errores,Manejo básico de error: Uso de la función die (),Creación de un controlador de errores personalizado,gramática,nivel del reporte,Configuración de controlador de errores,Ejemplos,Error gatillo,Ejemplos,Ejemplos,Registro de errores,Mensaje de error se envía por correo electrónico,
En PHP, el manejo de errores por defecto es muy simple. Un mensaje de error se envía al navegador, el mensaje con el nombre del archivo, número de línea y una descripción del mensaje de error.
Al crear secuencias de comandos y aplicaciones Web, gestión de errores es una parte importante. Si el código carece de código de comprobación de errores, el programa puede parecer muy poco profesional, sino que también abre la puerta a riesgos de seguridad.
Este tutorial presenta algunos de los método de detección de error más importante en PHP.
Vamos a explicar sus diferentes métodos de tratamiento de errores:
El primer ejemplo muestra una secuencia de comandos simple que se abre un archivo de texto:
<?php $file=fopen("welcome.txt","r"); ?>
Si no existe el archivo, recibirá un error como este:
Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /www/w3big/test/test.php on line 2
Para evitar que los usuarios un mensaje de error similar a la anterior, se analizó el archivo antes de acceder al archivo existe:
<?php if(!file_exists("welcome.txt")) { die("文件不存在"); } else { $file=fopen("welcome.txt","r"); } ?>
Ahora bien, si no existe el archivo, recibirá este mensaje de error similar al siguiente:
文件不存在
En comparación con el código anterior, el código de seguridad es más eficiente, ya que utiliza un simple mecanismo de manejo de errores para terminar la secuencia de comandos después de que el error.
Sin embargo, simplemente termina el script no es siempre el camino correcto. Veamos las funciones de PHP alternativas para el manejo de errores.
Crear un controlador de errores personalizado es bastante simple. Sólo tendrá que crear una función especial que se puede llamar cuando se produce un error en PHP.
Esta función debe ser capaz de manejar al menos dos parámetros (nivel de error y mensaje de error), pero puede aceptar hasta cinco parámetros (opcionalmente: archivo, número de línea y el contexto del error):
error_function(error_level,error_message, error_file,error_line,error_context)
parámetros | descripción |
---|---|
error_level | Requerido. De error se define como un nivel de informe de error definido por el usuario. Debe ser un número. Consulte la tabla siguiente: nivel de reporte de errores. |
mensaje_error | Requerido. mensaje de error de error definido por el usuario indicó. |
error_file | Opcional. ocurrió el nombre de archivo de error especificado. |
ERROR_LINE | Opcional. número de línea predeterminada se produjo el error. |
error_context | Opcional. Especifica una matriz que contiene todas las variables cuando se produce un error en el uso y sus valores. |
Estos niveles de informes de error son los diferentes tipos de errores error de procesamiento de encargo Handler:
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE | run-time 通知。在脚本发现可能有错误时发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL | 所有错误和警告。(在 PHP 5.4 中,E_STRICT 成为 E_ALL 的一部分) |
Ahora, vamos a crear una función para controlar los errores:
function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); }
El código de seguridad es una simple función de control de errores. Cuando se activa, se obtendrá el nivel de error y mensajes de error. A continuación, emite el nivel de error y el mensaje y termina el script.
Ahora, hemos creado una función de control de errores, tenemos que determinar cuándo se activará la función.
gestor de errores por defecto de PHP es un gestor de errores incorporado. Vamos a transformar la función por encima de la duración gestor de errores por omisión del script.
Puede modificar el controlador de errores por lo que se aplica sólo a algún error, por lo que el guión puede haber diferentes maneras de manejar diferentes errores. Sin embargo, en este caso, tenemos la intención de utilizar para todos Handler errores Error nuestra costumbre:
set_error_handler("customError");
Como queremos que nuestra función personalizada para manejar todos los errores, set_error_handler () sólo se necesita un parámetro, se puede añadir un segundo argumento para especificar un nivel de error.
Al tratar de variable de salida que no existe, para probar el controlador de errores:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } // 设置错误处理函数 set_error_handler("customError"); // 触发错误 echo($test); ?>
La salida del código anterior es el siguiente:
Error: [8] Undefined variable: test
En la secuencia de comandos que el usuario ubicación de entrada de datos cuando la entrada de usuario no se dispara cuando un error es útil. En PHP, esto se realiza por la función trigger_error () para completar.
En este ejemplo, si la variable "prueba" es mayor que "1", se produce un error:
<?php $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1"); } ?>
La salida del código anterior es el siguiente:
Notice: 变量值必须小于等于 1 in /www/test/w3big.php on line 5
Puede provocar un error en la secuencia de comandos en cualquier lugar, mediante la adición de un segundo parámetro, puede especificar el nivel de error se dispara.
Los posibles tipos de errores:
En este ejemplo, si la variable "prueba" es mayor que "1", se produce un error E_USER_WARNING. Si esto sucede E_USER_WARNING, utilizaremos nuestro manejador de error personalizado y poner fin a la secuencia de comandos:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "脚本结束"; die(); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
La salida del código anterior es el siguiente:
Error: [512] 变量值必须小于等于 1 脚本结束
Ahora que hemos aprendido cómo crear su propio error, y cómo activar ellos, vamos a ver el registro de errores.
En caso de incumplimiento, de acuerdo con la configuración error_log en el php.ini, PHP envía un sistema de registro de errores para grabar o servidor de archivos. Al utilizar el error_log () la función que puede enviar registros de errores en un archivo especificado o un destino remoto.
Se envía un mensaje de error a sí mismo por correo electrónico es una buena manera para ser notificado de errores específicos.
En el siguiente ejemplo, si se produce un error específico, le enviaremos un e-mail con un mensaje de error y terminar la secuencia de comandos:
<?php // 错误处理函数 function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br>"; echo "已通知网站管理员"; error_log("Error: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } // 设置错误处理函数 set_error_handler("customError",E_USER_WARNING); // 触发错误 $test=2; if ($test>1) { trigger_error("变量值必须小于等于 1",E_USER_WARNING); } ?>
La salida del código anterior es el siguiente:
Error: [512] 变量值必须小于等于 1 已通知网站管理员
Los mensajes recibidos desde el código de seguridad es el siguiente:
Error: [512] 变量值必须小于等于 1
Este método no es adecuado para todos los errores. de error debe ser convencional utilizando el sistema de registro de PHP por defecto para el registro en el servidor.