Question

mkdir () fonctionne correctement cette question est plus d'attraper une erreur. Au lieu d'imprimer quand le répertoire existe, je voudrais juste avoir me écrire un message dans un journal personnalisé. Comment puis-je créer cette exception.

Attention: mkdir () [function.mkdir]: Le fichier existe

Était-ce utile?

La solution

  

Je voudrais juste avoir me écrire un message dans un journal personnalisé.

la solution est très facile. PHP ont déjà tout pour vous:

ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','/path/to/custom.log');

ou mêmes paramètres dans le php.ini ou .htaccess
Je pense que ce serait mieux que d'écrire chaque erreur possible manuellement

Si vous ne voulez pas cette erreur soit connecté (comme il peut être pas une erreur mais une partie de la logique d'application), vous pouvez vérifier le dossier existence premier

if (!file_exists($folder)) mkdir($folder);
else {/*take some appropriate action*/}

Autres conseils

Vous pouvez arrêter le message d'erreur d'afficher soit en supprimant des messages d'erreur au niveau mondial (dans la configuration ou l'exécution) avec le error_get_last lors du retour de mkdir false.

Pour l'enregistrement des erreurs règles globales applicables. Vous pouvez enregistrer les erreurs manuellement error_log .

Pour en savoir plus, consultez la section du manuel sur Gestion des erreurs .

Edit:

Comme suggéré dans les commentaires, un gestionnaire d'erreur personnalisé est également possible, sans doute plus robuste (en fonction de votre mise en œuvre), mais certainement plus élégante solution.

function err_handler($errno, $errstr) {
    // Ignore or log error here
}

set_error_handler('err_handler');

De cette façon, le message d'erreur ne s'affiche pas, à moins que vous l'écho de façon explicite. Notez bien que, lorsque vous utilisez un gestionnaire d'erreur personnalisé error_get_last retournera NULL.

Vous pouvez réécrire toute fonction d'appel système avec une classe comme ceci:

file: system.php     

namespace abc;

class System {

    const CAN_NOT_MAKE_DIRECTORY = 1;

    static public function makeDirectory($path) {
        $cmd = "mkdir " . $path;
        $output = \shell_exec($cmd . " 2>&1"); // system call
        if ($output != "") {
            throw new \Exception($output, System::CAN_NOT_MAKE_DIRECTORY);
        }
        return(\TRUE);
    }

}

Ensuite, vous pouvez appeler la méthode et à intercepter l'exception:

file: index.php     

namespace abc;
require 'system.php';

try {
    System::makeDirectory($directoryName);
} catch (\Exception $e) {
    throw new \Exception($e->getMessage(), System::CAN_NOT_MAKE_DIRECTORY);
} 

Maintenant, vous pouvez traiter toutes les erreurs de système avec le try {...} catch(...) {...} finally {...} normalement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top