Frage

mkdir () korrekt funktioniert diese Frage mehr ist über einen Fehler zu kontrollieren. Statt dies zu drucken, wenn das Verzeichnis existiert würde Ich mag nur, um es auf eine Nachricht an mich selbst in einem benutzerdefinierten Protokoll schreiben. Wie erstelle ich diese Ausnahme.

Warning: mkdir () [function.mkdir]: Die Datei existiert

War es hilfreich?

Lösung

  

Ich möchte nur, um es auf eine Nachricht an mich selbst in einem benutzerdefinierten Protokoll schreiben.

ist die Lösung sehr einfach. PHP hat bereits alles für Dich:

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

oder gleiche Einstellungen in der php.ini oder .htaccess
Ich denke, es wäre besser als Schreib jeder mögliche Fehler manuell

Wenn Sie nicht möchten, dass dieser Fehler protokolliert werden (da es nicht Fehler sein kann, aber ein Teil der Anwendungslogik) können Sie Ordner Existenz überprüfen Sie zuerst

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

Andere Tipps

Sie kann die Fehlermeldung stoppen entweder von der Anzeige von Fehlermeldungen zu unterdrücken global (in Config oder Laufzeit) mit dem error_get_last wenn mkdir Renditen false.

Für die Fehlerprotokollierung globale Regeln gelten. Sie können Fehler manuell einloggen mit error_log .

Für weitere Lesung finden Sie im Handbuch Abschnitt Fehlerbehandlung .

Edit:

vorgeschlagen Wie in den Kommentaren, eine benutzerdefinierte Fehlerbehandlung ist auch eine mögliche, wohl robustere (auf der Implementierung abhängig), aber sicherlich elegantere Lösung.

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

set_error_handler('err_handler');

Auf diese Weise wird die Fehlermeldung nicht angezeigt, es sei denn, Sie explizit Echo. Beachten Sie jedoch, wenn Sie eine benutzerdefinierte Fehlerbehandlung error_get_last verwendet, wird NULL zurück.

Sie können umschreiben jede Systemaufruf-Funktion mit einer Klasse wie folgt:

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

}

Dann können Sie die Methode aufrufen und Intercept Ausnahme:

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

Jetzt können Sie alle Systemfehler mit dem try {...} catch(...) {...} finally {...} behandeln normal.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top