Damit können Sie eine eigene Fortsetzungsfunktion definieren, die bei einem fatalen Fehler übernimmt. Dies verwendet register_shutdown_function()
, um den schwerwiegenden Fehler abzufangen.
Verbrauch:
function my_continuation_func($filename, $arg2) {
// On fatal error during include, continue script execution from here.
// When this function ends, or if another fatal error occurs,
// the execution will stop.
}
include_try('my_continuation_func', array($filename, $arg2));
$data = include($filename);
$error = include_catch();
Wenn ein schwerwiegender Fehler (wie ein Parse-Fehler) auftritt, wird die Ausführung des Skripts von my_continuation_func()
fortzusetzen. Andernfalls gibt include_catch()
true
zurück, wenn beim Analysieren ein Fehler aufgetreten ist.
Jeder Ausgang (wie echo 'something';
) von include()
wird als Fehler behandelt. Es sei denn, Sie haben die Ausgabe aktiviert, indem Sie true
als drittes Argument an include_try()
übergeben.
Dieser Code sorgt automatisch für mögliche Änderungen des Arbeitsverzeichnisses in der Shutdown-Funktion.
Sie können dies für eine beliebige Anzahl von Includes verwenden, aber der zweite schwerwiegende Fehler, der auftritt, kann nicht abgefangen werden: Die Ausführung wird gestoppt.
Funktionen enthalten sein:
function include_try($cont_func, $cont_param_arr, $output = false) {
// Setup shutdown function:
static $run = 0;
if($run++ === 0) register_shutdown_function('include_shutdown_handler');
// If output is not allowed, capture it:
if(!$output) ob_start();
// Reset error_get_last():
@user_error('error_get_last mark');
// Enable shutdown handler and store parameters:
$params = array($cont_func, $cont_param_arr, $output, getcwd())
$GLOBALS['_include_shutdown_handler'] = $params;
}
function include_catch() {
$error_get_last = error_get_last();
$output = $GLOBALS['_include_shutdown_handler'][2];
// Disable shutdown handler:
$GLOBALS['_include_shutdown_handler'] = NULL;
// Check unauthorized outputs or if an error occured:
return ($output ? false : ob_get_clean() !== '')
|| $error_get_last['message'] !== 'error_get_last mark';
}
function include_shutdown_handler() {
$func = $GLOBALS['_include_shutdown_handler'];
if($func !== NULL) {
// Cleanup:
include_catch();
// Fix potentially wrong working directory:
chdir($func[3]);
// Call continuation function:
call_user_func_array($func[0], $func[1]);
}
}
Ich brauche diese Datei enthalten manchmal kann es für einige Host fatalen Fehler zurück Es kann durch eine einfache if-Anweisung
Sie haben getan werden. – SarwarCSE
Verwenden Sie das 'require' anstelle von include. –
"Es kann einen fatalen Fehler für einen Host zurückgeben" - welche Art von fatal? Warum genau tritt es auf? – zerkms