php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-08-2008, 19:30
bemax
 Newbie
Links : Onlinestatus : bemax ist offline
Registriert seit: Aug 2008
Beiträge: 5
bemax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Mögliche Warnings einer Funktion und ob Sie das Skript abbrechen

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)
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';
}
?>
Gruß

Max
Mit Zitat antworten
  #2 (permalink)  
Alt 25-08-2008, 20:57
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Mögliche Warnings einer Funktion und ob Sie das Skript abbrechen

Zitat:
Original geschrieben von bemax
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.
ZipArchive::extractTo - Rückgabewerte
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

so ist das eigentlich bei allen funktionen, false zeigt dir, dass etwas schiefgelaufen ist.
oder was meintest du?

Zitat:
Original geschrieben von bemax
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)
ein E_WARNING gibt nur die warnmeldung (je nach einstellung) aus und das script wird fortgeführt.

ein E_ERROR ist ein fataler fehler zur laufzeit und das script wird in _jedem_ fall abgebrochen. wenn z.b. die max_execution_time überschritten wurde, dann kannst du daran nichts ändern auch nicht mit einem error_handler.

insofern verstehe ich die frage nicht.
Mit Zitat antworten
  #3 (permalink)  
Alt 25-08-2008, 22:08
bemax
 Newbie
Links : Onlinestatus : bemax ist offline
Registriert seit: Aug 2008
Beiträge: 5
bemax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
chmod1

Warning: ZipArchive::extractTo() [ziparchive.extractto]: Permission denied in /srv/www/web97/html/unzip.php on line 12
Leider ist es nicht so das die Warnings nicht das Programm abbrechen ... Diese Fehlermeldung erhalte ich bei dem obigen Code wenn ich Zeile 3 (error_reporting(E_ERROR)) und Zeile 4 (set_error_handler) auskommentiere .. normalerweilse müssten noch einige Ausgaben kommen. Kurioserweise kann man auch Warnings erzeugen die nicht zum Abbruch führen.

Gruß

Max

php 5.2.6
Linux 2.6.18-6-amd64

Geändert von bemax (25-08-2008 um 22:11 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 25-08-2008, 22:28
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von bemax
Leider ist es nicht so das die Warnings nicht das Programm abbrechen ... Diese Fehlermeldung erhalte ich bei dem obigen Code wenn ich Zeile 3 (error_reporting(E_ERROR)) und Zeile 4 (set_error_handler) auskommentiere .. normalerweilse müssten noch einige Ausgaben kommen.
sorry, kann ich nicht nachstellen. ich erhalte wie erwartet die nachfolgenden ausgaben:
Code:
chmod1

Warning: ZipArchive::extractTo(./test/./AWP.xls) [function.ZipArchive-extractTo]: failed to open stream:
Permission denied in /mnt/hgfs/htdocs/index.php on line 13
extract:1
ok
close:1
Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11
EDIT:
warum ist bei dir extractTo() leer? hast du das rausgenommen?

Geändert von 3DMax (25-08-2008 um 22:31 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2008, 08:09
bemax
 Newbie
Links : Onlinestatus : bemax ist offline
Registriert seit: Aug 2008
Beiträge: 5
bemax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Guten Morgen,

du hast ein sehr scharfes Auge

Ich hab mal geschaut woran es liegt das bei mir keine Datei in der Fehlermeldung auftaucht.

Der Grund ist ziemlich einfach. Wenn ich alle Verzeichnisse aus dem Zip entferne steht bei mir auch eine Datei in der Fehlermeldung.. scheinbar versucht er erst die Verzeichnisse zu entpacken und bekommt dann schon den Fehler der das Programm unterbricht.

Würde mich freuen wenn du das nochmal gegentesten könntest ob das bei dir auch so passiert.


Gruß

Max

aktueller Code:
PHP-Code:
<?php
define
("LB","<br />\n");
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 
'Fehler beim öffnen der zip-Datei';
    }
}
else
{    
    echo 
'Klasse ZipArchive nicht im System';
}
?>
Mit Zitat antworten
  #6 (permalink)  
Alt 26-08-2008, 11:31
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von bemax
Würde mich freuen wenn du das nochmal gegentesten könntest ob das bei dir auch so passiert.
du meinst ein zip nur mit verzeichnissen?

ok, fehlermeldung sieht jetzt wie bei dir aus (extractTo() ) - das script arbeitet aber trotzdem weiter. hätte mich auch stark gewundert, wenn das nicht so wäre.
Mit Zitat antworten
  #7 (permalink)  
Alt 26-08-2008, 16:43
bemax
 Newbie
Links : Onlinestatus : bemax ist offline
Registriert seit: Aug 2008
Beiträge: 5
bemax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm das ist jetzt aber wirklich komisch ..

denn der Fall mit der Warning wegen der Datei unterbricht bei mir auch nicht das Skript aber bei der Warning mit nur Verzeichnissen in der obersten Ebene schon.

Also bei mir läuft der Server im save mode vielleicht liegt es daran..

Danke fürs Testen

Gruß

Max
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:44 Uhr.