strip_tags remove quitar para funcion etiquetas ejemplo php error-handling error-code

php - remove - strip_tags wordpress



¿Cómo puedo hacer que php devuelva 500 al encontrar una excepción fatal? (9)

¡La configuración estándar de PHP devuelve 500 cuando ocurre un error! Sólo asegúrese de que su display_errors = apagado. Puedes simularlo con:

ini_set(''display_errors'', 0); noFunction();

En la producción, la directiva display_errors está desactivada por defecto.

Los errores fatales de PHP vuelven como código de estado 200 al cliente HTTP. ¿Cómo puedo hacer que devuelva un código de estado 500 (error interno del servidor)?


Este es exactamente el problema que tuve ayer y encontré la solución de la siguiente manera:

1) en primer lugar, debe detectar errores fatales de PHP, que es el tipo de error E_ERROR. cuando ocurra este error, el script almacenará el error y terminará la ejecución. puede obtener el error almacenado llamando a la función error_get_last ().

2) antes de que finalice el script, siempre se llamará a una función de devolución de llamada register_shutdown_function (). por lo que necesita registrar un controlador de errores con esta función para hacer lo que desea, en este caso, devolver el encabezado 500 y una página de error interno personalizada (opcional).

function my_error_handler() { $last_error = error_get_last(); if ($last_error && $last_error[''type'']==E_ERROR) { header("HTTP/1.1 500 Internal Server Error"); echo ''...'';//html for 500 page } } register_shutdown_function(''my_error_handler'');

Nota: si desea detectar el tipo de error personalizado, que comienza con E_USER *, puede usar la función set_error_handler () para registrar el controlador de errores y desencadenar un error mediante la función trigger_error, sin embargo, este controlador de errores no puede manejar el tipo de error E_ERROR. Ver explicación en php.net sobre el controlador de errores.


He usado "set_exception_handler" para manejar las excepciones no detectadas.

function handleException($ex) { error_log("Uncaught exception class=" . get_class($ex) . " message=" . $ex->getMessage() . " line=" . $ex->getLine()); ob_end_clean(); # try to purge content sent so far header(''HTTP/1.1 500 Internal Server Error''); echo ''Internal error''; } set_exception_handler(''handleException'');


Lo difícil cuando se trata de errores fatales (errores de compilación, por ejemplo, un punto y coma faltante) es que la secuencia de comandos no se ejecutará, por lo que no ayudará a establecer el código de estado en esa secuencia de comandos. Sin embargo, cuando incluye o requiere un script, el script de llamada se ejecutará, independientemente de los errores en el script incluido. Con esto, llego a esta solución:

rock-solid-script.php

// minimize changes to this script to keep it rock-solid http_response_code(500); // PHP >= 5.4 require_once("script-i-want-to-guard-for-errors.php");

script-i-want-to-guard-for-errors.php:

// do all the processsing // don''t produce any output // you might want to use output buffering http_response_code(200); // PHP >= 5.4 // here you can produce the output

Dirige tu llamada al rock-solid-script.php y estás listo para comenzar.

Me hubiera gustado más establecer el código de estado predeterminado en 500 en .htaccess. Eso me parece más elegante, pero no puedo encontrar la manera de hacerlo. Probé la marca R de RewriteRule, pero esto impide la ejecución de php por completo, por lo que no sirve de nada.


No es posible manejar PHP E_ERROR de ninguna manera según la documentación de PHP: http://www.php.net/manual/en/function.set-error-handler.php

Tampoco es posible manejar "E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING y la mayor parte de E_STRICT" de acuerdo con ese enlace.

PUEDE proporcionar un controlador para el otro error, advertencia y avisos, incluido E_USER_ERROR, pero eso no es tan útil como parece, ya que el programador con trigger_error () lanza este error intencionalmente.

Y, por supuesto, puede capturar cualquier excepción (incluso las lanzadas por las funciones nativas de PHP).

Estoy de acuerdo en que esto es un problema. Los servidores NO deben devolver 200 OK cuando el código de la aplicación se bloquea y se quema.


Nunca olvide configurar el header("HTTP/1.1 200 OK", true, 200); como la última línea de cualquier ruta de ejecución:

//first things first: header("HTTP/1.1 500 Internal Server Error", true, 500); //Application code, includes, requires, etc. [...] //somewhere something happens //die(); throw new Exception("Uncaught exception!"); //last things last, only reached if code execution was not stopped by uncaught exception or some fatal error header("HTTP/1.1 200 OK", true, 200);

En PHP 5.4 puede reemplazar la función de header anterior con el http_response_code(200) o http_response_code(200) mucho mejor.



Tendría que detectar el error lanzado utilizando try/catch y luego usar ese bloque catch para enviar un header() con el error 500.

try { ...badcode... throw new Exception(''error''); } catch (Exception $e) { header("Status: 500 Server Error"); var_dump($e->getMessage()); }

Si la excepción fatal no está rodeada por los bloques catch de try {}, debe registrar un controlador global y usar register_shutdown_function() para verificar si hay un error al final del script.


header("HTTP/1.1 500 Internal Server Error");