Hallo Leute,
Ich ärgere mich momentan mit den Warnings ein bisschen rum. Seit PHP5 gibts es immer mehr und gute Klassen die einfach zu benutzen sind, aber nirgends ist dokumentiert welche Fehler und Warnings von den Funktionen geworfen werden und ob die Warnings nur einen Text drucken oder das ganze Skript abbrechen.
Mir ist das aktuell bei der Methode ZipArchive::extractTo auf die Füsse gefallen. Es funktioniert alles sehr gut nur wenn das übergebene Verzeichnis z.B. nicht lesbar ist bricht das Skript mit einer Warning ab. Nun ist es kein größeres Problem das Verzeichnis zu testen ob es lesbar und ausführbar ist aber es gibt bestimmt noch eine ganze Menge mehr Warnings die man ohne Dokumentation nie alle finden wird.
Jetzt ist meine Frage sind irgendwo alle Warnings dokumentiert?
Und zweitens kann man irgendwo einstellen das Warnings (/Errors) nur eine Fehlermeldung werfen/drucken (mit set_error_handler abfangbar) und nicht das ganze Skript beenden, was auch passiert wenn man einen error_handler nutzt!!! (mein PHP ist 5.2.6)
hier mal der Beispielcode (funktionsfähiger Ausschnitt aus dem Gesamtwerk)
Gruß
Max
Ich ärgere mich momentan mit den Warnings ein bisschen rum. Seit PHP5 gibts es immer mehr und gute Klassen die einfach zu benutzen sind, aber nirgends ist dokumentiert welche Fehler und Warnings von den Funktionen geworfen werden und ob die Warnings nur einen Text drucken oder das ganze Skript abbrechen.
Mir ist das aktuell bei der Methode ZipArchive::extractTo auf die Füsse gefallen. Es funktioniert alles sehr gut nur wenn das übergebene Verzeichnis z.B. nicht lesbar ist bricht das Skript mit einer Warning ab. Nun ist es kein größeres Problem das Verzeichnis zu testen ob es lesbar und ausführbar ist aber es gibt bestimmt noch eine ganze Menge mehr Warnings die man ohne Dokumentation nie alle finden wird.
Jetzt ist meine Frage sind irgendwo alle Warnings dokumentiert?
Und zweitens kann man irgendwo einstellen das Warnings (/Errors) nur eine Fehlermeldung werfen/drucken (mit set_error_handler abfangbar) und nicht das ganze Skript beenden, was auch passiert wenn man einen error_handler nutzt!!! (mein PHP ist 5.2.6)
hier mal der Beispielcode (funktionsfähiger Ausschnitt aus dem Gesamtwerk)
PHP-Code:
<?php
define("LB","<br />\n");
error_reporting(E_ERROR);
$alter_error_handler = set_error_handler("myErrorHandler");
if (class_exists("ZipArchive"))
{
$zip = new ZipArchive;
$res = $zip->open('modx.zip',ZIPARCHIVE::CHECKCONS);
if ($res === TRUE) {
$dir_name = 'temp';
echo 'chmod'.chmod($dir_name,0500).LB; //damit der Error geworfen wird
echo 'extract:'.$zip->extractTo($dir_name).LB;
echo 'ok'.LB;
echo 'close:'.$zip->close().LB;
} else {
echo zipFileErrMsg($res);
}
}
else
{
echo 'Klasse ZipArchive nicht im System';
}
// Fehlerbehandlungsfunktion
function myErrorHandler($fehlercode, $fehlertext, $fehlerdatei, $fehlerzeile)
{
switch ($fehlercode) {
case E_USER_ERROR:
echo "<b>Mein FEHLER</b> [$fehlercode] $fehlertext<br />\n";
echo " Fataler Fehler in Zeile $fehlerzeile in der Datei $fehlerdatei";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Abbruch...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>Meine WARNUNG</b> [$fehlercode] $fehlertext<br />\n";
break;
case E_USER_NOTICE:
echo "<b>Mein HINWEIS</b> [$fehlercode] $fehlertext<br />\n";
break;
default:
echo "Unbekannter Fehlertyp: [$fehlercode] $fehlertext (Zeile: $fehlerzeile)<br />\n";
break;
}
/* Damit die PHP-interne Fehlerbehandlung nicht ausgeführt wird */
return true;
}
function zipFileErrMsg($errno) {
// using constant name as a string to make this function PHP4 compatible
$zipFileFunctionsErrors = array(
'ZIPARCHIVE::ER_MULTIDISK' => 'Multi-disk zip archives not supported.',
'ZIPARCHIVE::ER_RENAME' => 'Renaming temporary file failed.',
'ZIPARCHIVE::ER_CLOSE' => 'Closing zip archive failed',
'ZIPARCHIVE::ER_SEEK' => 'Seek error',
'ZIPARCHIVE::ER_READ' => 'Read error',
'ZIPARCHIVE::ER_WRITE' => 'Write error',
'ZIPARCHIVE::ER_CRC' => 'CRC error',
'ZIPARCHIVE::ER_ZIPCLOSED' => 'Containing zip archive was closed',
'ZIPARCHIVE::ER_NOENT' => 'No such file.',
'ZIPARCHIVE::ER_EXISTS' => 'File already exists',
'ZIPARCHIVE::ER_OPEN' => 'Cant open file',
'ZIPARCHIVE::ER_TMPOPEN' => 'Failure to create temporary file.',
'ZIPARCHIVE::ER_ZLIB' => 'Zlib error',
'ZIPARCHIVE::ER_MEMORY' => 'Memory allocation failure',
'ZIPARCHIVE::ER_CHANGED' => 'Entry has been changed',
'ZIPARCHIVE::ER_COMPNOTSUPP' => 'Compression method not supported.',
'ZIPARCHIVE::ER_EOF' => 'Premature EOF',
'ZIPARCHIVE::ER_INVAL' => 'Invalid argument',
'ZIPARCHIVE::ER_NOZIP' => 'Not a zip archive',
'ZIPARCHIVE::ER_INTERNAL' => 'Internal error',
'ZIPARCHIVE::ER_INCONS' => 'Zip archive inconsistent',
'ZIPARCHIVE::ER_REMOVE' => 'Cant remove file',
'ZIPARCHIVE::ER_DELETED' => 'Entry has been deleted',
);
$errmsg = 'unknown';
foreach ($zipFileFunctionsErrors as $constName => $errorMessage) {
if (defined($constName) and constant($constName) === $errno) {
return 'Zip File Function error: '.$errorMessage;
}
}
return 'Zip File Function error: unknown';
}
?>
Max
Kommentar