Php mkdir () Ausnahmebehandlung
-
30-09-2019 - |
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
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.