7
votes

Y a-t-il un moyen de sauter une erreur fatale du fichier incluant dans PHP?

Si j'inclus un fichier à PHP. S'il y a une erreur fatale dans ce PHP, il y a alors un moyen de sauter cela.

<?php
   include "somefile.php";
   echo "OK"; // Is there any way to print this OK  If there is any fatal error on somefile.php
?>


4 commentaires

J'ai besoin d'inclure ce fichier parfois qu'il peut renvoyer une erreur fatale pour certains hôtes.


Utilisez le exiger au lieu d'inclure.


"Cela peut renvoyer une erreur fatale pour certains hôtes" - quel genre de fatal? Pourquoi exactement cela se produit?


PS: Y a-t-il une chance d'utiliser fichier php -l.php à la place?


8 Réponses :


2
votes

fatal signifie fatal ... Il n'y a aucun moyen de récupérer d'une erreur fatale.


0 commentaires

0
votes

edit: j'ai raté le mot fatal. Comme indiqué, vous ne pouvez pas récupérer d'une erreur fatale. S'il ne s'agit que d'une exception, la réponse d'écrit précipité ci-dessous fonctionnera.

Y compris un autre module PHP est identique à ce que le code inséré est inséré en ligne, de sorte qu'un simple try-attrape doit fonctionner: xxx


2 commentaires

Ne fonctionnera pas pour des erreurs fatales ... seulement des exceptions et il n'ya aucun moyen de faire une exception sur une erreur fatale.


Oui, je devais avoir brouillé sur ça. Ces commentaires sont corrects.



0
votes

Essayez de définir une fonction set_error_handler () qui ne meure pas sur des erreurs mortelles, mais à la place Apache s'est écrasé. En d'autres termes, PHP doit mourir afin que le système ne soit pas.

Voir cette


0 commentaires

1
votes

php ne tolérera pas avec des erreurs fatales. Il est préférable de vérifier le fichier fourni et de le résoudre. En fait, vous pouvez essayer de regarder enregistrer-la fonction , Mais il n'est pas recommandé de fuir vos problèmes.


0 commentaires

0
votes

Erreur fatale signifie qu'il y a quelque chose de sérieusement mal avec le code y compris. Comme @OrangePill a dit qu'il n'y a aucun moyen d'arrêter ce message d'erreur fatal. Veuillez passer par votre codage et trouver l'erreur.


0 commentaires

2
votes

Vous pouvez utiliser register_shutdown_function .

<?php
function echoOk()
    {
    echo "OK";
    }

register_shutdown_function(function ()
        {
        $error = error_get_last();
        // to make sure that there is any fatal error
        if (isset($error) &&
            ($error['type'] == E_ERROR
            || $error['type'] == E_PARSE
            || $error['type'] == E_COMPILE_ERROR
            || $error['type'] == E_CORE_ERROR))
            {
            echoOk();
            }
        });

include "somefile.php";

echoOk();


0 commentaires

4
votes

Avec cela, vous pouvez définir votre propre fonction de continuation qui prendra le relu en cas d'erreur fatale. Ceci utilise register_shutdown_function () code> à intercepter l'erreur fatale.

Utilisation: P>

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]);
    }
}


0 commentaires

1
votes

Oui, il y a. Il peut être fait à travers une simple déclaration si

​​vous avez: p> xxx pré>

Essayez ceci: p>

<?php
   if(include "somefile.php"){
          // echo do something if success
   }else{
          echo "OK";
   }


1 commentaires

Cela ne fonctionne pas si quelquefile.php contient (fichier de cache écrit partiel).