tomar play pantalla moto laptop hacer computadora como captura php die

php - play - como tomar captura de pantalla en pc



¿Puedo capturar los mensajes de salida() y morir()? (7)

Me gustaría poder atrapar los mensajes die() y exit() . es posible? Espero algo similar a set_error_handler y set_exception_handler . He mirado register_shutdown_function() pero parece que no contiene contexto para las llamadas ofensivas die() y exit() .

Me doy cuenta de que die() y exit() son malas maneras de manejar los errores. No estoy buscando que me digan que no haga esto. :) Estoy creando un sistema genérico y quiero poder registrar correctamente exit() y die() si, por alguna razón, alguien (no yo) decide que esta es una buena idea.


¿Por qué no usar el manejo de errores personalizado en su lugar? Si no, siempre puedes usar LD_PRELOAD e inyección de código C para atraparlo :) O recompilar php con tus personalizaciones: P


De acuerdo con el manual de PHP , las funciones de apagado aún deben ser notificadas cuando se llama die () o exit ().

Las funciones de apagado y los destructores de objetos siempre se ejecutarán incluso si se llama a exit ().

Parece que no es posible obtener el estado enviado en exit (estado $). A menos que pueda usar el búfer de salida para capturarlo, pero no estoy seguro de cómo sabría cuándo llamar a ob_start() .


Lo mejor que puedo decir es que esto no es realmente posible. Algunas de las soluciones publicadas aquí pueden funcionar pero requieren mucho trabajo adicional o muchas dependencias. No hay forma de atrapar fácilmente los mensajes die () y exit ().


Sí, puedes, pero necesitas ob_start , ob_get_contents , ob_end_clean y register_shutdown_function

function onDie(){ $message = ob_get_contents(); // Capture ''Doh'' ob_end_clean(); // Cleans output buffer callWhateverYouWant(); } register_shutdown_function(''onDie''); //... ob_start(); // You need this to turn on output buffering before using die/exit @$dumbVar = 1000/0 or die(''Doh''); // "@" prevent warning/error from php //... ob_end_clean(); // Remember clean your buffer before you need to use echo/print


Si utiliza el método de punto de entrada único. (index.php) Puedo recomendar esto para su manejo de errores:

Version corta:

ob_start(); register_shutdown_function(''shutdownHandler''); include(''something''); define(CLEAN_EXIT, true); function shutdownHandler() { if(!defined("CLEAN_EXIT") || !CLEAN_EXIT) { $msg = "Script stopped unexpectedly: ".ob_get_contents(); //Handle premature die()/exit() here } }

Pasos adicionales y más detallados:

Aproximadamente mi forma de hacerlo. Tengo más cosas de las que muestro aquí (manejo de transacciones de bases de datos / rollback / envío de correos electrónicos / escritura de registros / visualización de mensajes de error amistosos / informes de errores del usuario / etc), pero esta es la idea básica detrás de todo esto).
Espero que ayude a alguien.

<?php //Some initialization //starting output buffering. (fatalErrorHandler is optional, but I recommend using it) ob_start(''fatalErrorHandler''); //Execute code right at the end. Catch exit() and die() here. But also all other terminations inside PHPs control register_shutdown_function(''shutdownHandler''); //handling other errors: Also optional set_error_handler(''errorHandler''); try { //Include of offensive code include(...); } catch (Exception $ex) { //Handling exception. Be careful to not raise exceptions here again. As you can end up in a cycle. } //Code reached this point, so it was a clean exit. define(CLEAN_EXIT, true); //Gets called when the script engine shuts down. function shutdownHandler() { $status = connection_status(); $statusText = ""; switch ($status) { case 0: if (!defined("CLEAN_EXIT") || !CLEAN_EXIT) { $msg = "Script stopped unexpectedly: ".ob_get_contents(); //Handle premature die()/exit() here } else { //Clean exit. Just return return; } case 1: $statusText = "ABORTED (1)"; break; case 2: $statusText = "TIMEOUT (2)"; break; case 3: $statusText = "ABORTED & TIMEOUT (3)"; break; default : $statusText = "UNKNOWN ($status)"; break; } //Handle other exit variants saved in $statusText here ob_get_contents() can have additional useful information here } // error handler function (This is optional in your case) function errorHandler($errno, $errstr, $errfile, $errline) { $msg = "[$errno] $errstr/nOn line $errline in file $errfile"; switch ($errno) { case E_ERROR: $msg = "[E_ERROR] ".$msg; break; case E_WARNING: $msg = "[E_WARNING] ".$msg; break; case E_PARSE: $msg = "[E_PARSE] ".$msg; break; case E_NOTICE: $msg = "[E_NOTICE] ".$msg; break; case E_CORE_ERROR: $msg = "[E_CORE_ERROR] ".$msg; break; case E_CORE_WARNING: $msg = "[E_CORE_WARNING] ".$msg; break; case E_COMPILE_ERROR: $msg = "[E_COMPILE_ERROR] ".$msg; break; case E_COMPILE_WARNING: $msg = "[E_COMPILE_WARNING] ".$msg; break; case E_USER_ERROR: $msg = "[E_USER_ERROR] ".$msg; break; case E_USER_WARNING: $msg = "[E_USER_WARNING] ".$msg; break; case E_USER_NOTICE: $msg = "[E_USER_NOTICE] ".$msg; break; case E_STRICT: $msg = "[E_STRICT] ".$msg; break; case E_RECOVERABLE_ERROR: $msg = "[E_RECOVERABLE_ERROR] ".$msg; break; case E_DEPRECATED: $msg = "[E_DEPRECIATED] ".$msg; break; case E_USER_DEPRICIATED: $msg = "[E_USER_DEPRICIATED] ".$msg; break; default: $msg = "[UNKNOWN] ".$msg; break; } //Handle Normal error/notice/warning here. $handled = ... if ($handled) return true; //handled. Proceed execution else throw Exception($msg); //Be careful. this might quickly become cyclic. Be sure to have code that catches and handles exceptions. Else die() here after logging/reporting the error. } function fatalErrorHandler(&$buffer) { $matches = null; //Checking if the output contains a fatal error if (preg_match(''/<br //>/s*<b>([^<>].*)error<//b>:(.*)<br //>$/'', $buffer, $matches) ) { $msg = preg_replace(''/<.*?>/'','''',$matches[2]); //Handle Fatal error here return "There was an unexpected situation that resulted in an error. We have been informed and will look into it." } //No fatal exception. Return buffer and continue return $buffer; }



sí: escribe una función y usa eso en su lugar.

function kill($msg){ // Do your logging.. exit($msg); }