¿Existe alguna forma en PHP para atrapar el error fatal cuando se alcanza el tiempo máximo de ejecución y darle al usuario un mejor mensaje?Php trapping error de tiempo máximo de ejecución
Respuesta
intente configurar una bandera "Hecho" después de la ejecución de un archivo y registro de una función de desconexión que verificará si esa marca está definida
Mi respuesta original no funcionará, ya que no se puede detectar un error fatal. Si desea leerlo de todos modos, consulte el historial de revisiones.
Mi única conjetura es que podría usar register_shutdown_function
. Establezca una variable al inicio de la secuencia de comandos, desactívela cuando la secuencia de comandos se haya completado correctamente. Escribir una función que comprueba que la variable y actúa sobre él si todavía está configurado, a continuación, aplicar la función usando register_shutdown_function
http://php.net/manual/en/function.register-shutdown-function.php
Después de leer las dos primeras respuestas aquí, tuve que probar register_shutdown_function()
- no pensé que se ejecutaría. Después de todo, ¿cómo puede funcionar una función de usuario una vez que no hay más memoria o ha transcurrido el tiempo de ejecución? Me sorprendió saber que las funciones de apagado ejecutan, incluso en una situación OOM, o cuando se ha superado el tiempo de ejecución. Prueba de concepto:
Para probar límite de memoria:
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
ini_set('memory_limit', '1000');
$x = '';
while(true) {
$x .= 'lkajsdlfkjasldkfjlaskdfjasldkfj';
}
Salida:
PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
Call Stack:
0.0002 81360 1. {main}() /home/scratch.php:0
omg
Para probar el tiempo de ejecución:
cat scratch.php
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
set_time_limit(1);
while(true) {}
Salida:
PHP Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
Call Stack:
0.0002 80200 1. {main}() /home/scratch.php:0
omg
Tenga en cuenta que, para obtener su mensaje para mostrar antes de Salida de error de PHP, tendría que desactivar la salida de error de PHP por completo. Cuál es la mejor práctica para un sitio de producción de todos modos.
Se alcanzó el tiempo máximo de ejecución! = Memoria permitida agotada Es difícil hacer que el script alcance el tiempo máximo de ejecución con bucles y funciones de reposo, el sueño congela el contador de tiempo de ejecución ... – shfx
Malo. Edición de la publicación para probar el límite de tiempo de ejecución en lugar del agotamiento de la memoria –
Si no hay forma de atrapar el error desde el nivel API, el motor PHP debería poder volcar la memoria en el disco duro cada vez que ocurra un error fatal, como lo hace Windows cuando ve una 'pantalla azul'.
- 1. Máximo tiempo de ejecución problema
- 2. El tiempo máximo de ejecución en phpMyadmin
- 3. set_time_limit (0) y el "tiempo máximo de ejecución" PHP
- 4. drupal tiempo de ejecución máximo de cron
- 5. Tiempo máximo de ejecución para JavaScript
- 6. PHP trabajo cron terminación prematura debido al tiempo máximo de ejecución error grave
- 7. Tiempo máximo() | PHP
- 8. Suprime el mensaje "Error fatal: tiempo de ejecución máximo de 30 ..."
- 9. Error fatal: el tiempo máximo de ejecución de 0 segundos superó
- 10. Establecer el tiempo máximo de ejecución para exec() específicamente
- 11. Superado el tiempo máximo de ejecución en Google Apps Script
- 12. curl_exec tiempo máximo de ejecución: ¿qué lo está causando?
- 13. Fatal error: El tiempo máximo de ejecución de 30 segundos superó
- 14. WAMP 2.2e - phpmyadmin Error fatal: el tiempo de ejecución máximo de 30 segundos superó
- 15. ¿Cómo puedo establecer el tiempo máximo de ejecución para un script PHP?
- 16. VBA Error en tiempo de ejecución 3134
- 17. Evite el límite de tiempo de ejecución de PHP
- 18. tiempo de ejecución "real" límite
- 19. ¿Cómo establecer un tiempo de ejecución máximo para una consulta de mysql?
- 20. Número de archivo máximo puede php subir al mismo tiempo
- 21. ¿Cuenta el tiempo de espera para el límite de tiempo de ejecución?
- 22. Error de tiempo de ejecución de Microsoft JScript: Función esperada
- 23. Señales de trapping limpiamente en Perl
- 24. Error de tiempo de ejecución - java.lang.IllegalArgumentException: provider = gps
- 25. error de tiempo de ejecución con Vim Omnicompletion
- 26. Error de OCMock en el tiempo de ejecución
- 27. Excel VBA en tiempo de ejecución de error 1004
- 28. ¿Por qué CheckBoxFor produce el error de tiempo de ejecución?
- 29. Error de tiempo de ejecución cuando se prueban JUnit
- 30. Extracción de una función en tiempo de ejecución en PHP
simplemente me pegó - estaba reescribiendo mi respuesta en estas líneas –
;) es genial, su respuesta es más precisa – shfx
Gracias! Eso hizo el truco. – AdamA