Felix Riesterer: entzippen sowohl unter PHP4.4.4 als auch PHP5.1.6?

Beitrag lesen

Liebe Forumsleser und -schreiber,

ich versuche gerade auf meinem Windoof-Apachen2.2.3 den Zip-Support unter PHP5.1.6 einzurichten. Dabei scheitere ich an unterschiedlichen Einstellungen zwischen meinem lokalen System und dem System meines Webhosters.

phpinfo() bei meinem Hoster (PHP4.4.4) spuckt mir für "zip" folgendes aus:
Zip support        enabled

mein lokales System (PHP5.1.6) dagegen:
Zip                enabled
Extension Version  $Id: php_zip.c,v 1.70 2006/08/14 15:54:34 pajoye Exp $
Zip version        @PACKAGE_VERSION@
Libzip version     0.7.1

Nicht, dass mich die Ausführlichkeit irgendwie stören würde, aber offensichtlich gibt es da innere Unterschiede in der Ausführung meines Scripts auf beiden Systemen, die ich nicht so ganz verstehe. Gut, ich sehe den Unterschied in den PHP-Versionen, aber das Script soll in beiden Fällen fehlerfrei laufen, was es aber nur unter PHP4.4.4 auf meinem Webspace tut.

Das Script soll eine hochgeladene Datei auf dem Server inklusive Unterverzeichnisse entpacken. Mein PHP5.1.6 beschwert sich, dass der Funktion zip_read ein unpassender Parameter (keine "resource") übergeben worden sei. Hier der Code:

   $dir = './'; // zum Testen fest codiert, später variabel  
   $zip = zip_open('test.zip'); // ebenso zum Testen fest codiert  
  
   while($zip_entry = zip_read($zip)) { /* PHP5: Warning: zip_read()  
                                           expects parameter 1 to be  
                                           resource, integer given */  
       $entry = zip_entry_open($zip,$zip_entry);  
       $filename = zip_entry_name($zip_entry);  
       $target_dir = $dir.substr($filename, 0, strrpos($filename, '/'));  
       $filesize = zip_entry_filesize($zip_entry);  
       if (is_dir($target_dir) || mkdir($target_dir, 0777)) {  
           if ($filesize > 0) {  
               $contents = zip_entry_read($zip_entry, $filesize);  
  
               $handle = fopen($dir.$filename, 'wb+');  
               fputs($handle, $contents);  
               fclose($handle);  
               @chmod($dir.$filename, 0666);  
           }  
       }  
   }

Meine Nachforschungen haben ergeben, dass zip_open() die Zahl 11 zurückgibt, was ein Fehlercode ist, der besagt, dass das Öffnen fehlgeschlagen hätte (vergl. hierzu User-Comment von Adam Stout). Der Code ist mir insofern unverständlich, als dass eine Prüfung auf is_file zuvor mit true bewertet worden war. Mir ist das Ganze deshalb so schleierhaft, da sowohl Script, als auch Test-Zip-Datei lokal wie online identisch sind!

Wer weiß Rat?

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)