zip_open mit Größenbeschränkung?

LoD123

Grünschnabel
Hey!

Ich hab für meine Homepage ein kleines Backup-Script geschrieben, bei dem die SQL-Datenbanken in eine Textdatei gespeichert werden und zusammen mit den ganzen restlichen Dateien meines Webspaces in ein zip-Archiv gespeichert werden. Soweit noch kein Problem.
Ich kann die zip-Datei auch runterladen und auf der Festplatte ohne Probleme öffnen. Die zip-Datei scheint also fehlerfrei zu sein.

Aber beim Versuch dieses zip-Archiv per PHP auf dem Webspace zu entpacken gibts Probleme..
Bis jetzt will ich eigentlich nur das zum Laufen bringen:


PHP:
$path = getcwd() . '/backup.zip';

$zip = zip_open($path);
if ($zip!=false) {
    echo $zip;
    $zip_entry = zip_read($zip);
}

Allerdings erhalte ich dabei immer folgende Fehlermeldung:

Warning: zip_read() expects parameter 1 to be resource, integer given in ... on line ...

und die Variable $zip enthält den Wert 5, was soviel heißt wie ZIPARCHIVE::ER_READ.
Ich geh mal davon aus, dass das bedeutet, dass das zip-File nicht gelesen werden kann...


Ich vermute nun, dass mein zip-Archiv zu groß ist (21,9 MB), da ichs auch mit nem kleinerem, per Hand erstelltem zip-Archiv probiert hab. Da gabs keine Probleme.

Weiß jemand obs bei den zip-Funktionen wirklich Größenbeschränkungen gibt?
Oder könnts an was anderm liegen?

Ich bedanke mich schonmal für die Hilfe..
Lg
LoD123
 
Ist display_errors angestellt? Und [phpf]error_reporting[/phpf] auf dem höchsten Level?

Ich vermute es handelt sich um die Beschränkung von memory_limit. Wie hoch ist das denn eingestellt?
 
@Gumbo
Der Pfad stimmt, file_exists liefert true.

@Felix
display_errors ist an und error_reporting() auf dem höchsten Level, aber ich bekomme trotzdem nur den
Warning: zip_read() expects parameter 1 to be resource, integer given in ... on line ...
Fehler.

In der phpinfo() stehen für memory-limit 2 Werte:
einmal local: 64MB und dann noch master: 32MB
 
Du solltest hier auf jeden Fall mit is_resource() arbeiten um sicher zu gehen, dass der Rückgabewert eine Ressource ist.

Womit wurde das Zip-Archiv eigentlich erstellt?
 
Das Archiv wird per PHP wie folgt erstellt:
PHP:
$zip = new ZipArchive;
$zip->open('derPfad', ZipArchive::CREATE);
$zip->addFile($file,$file);
$zip->close();
Natürlich fehlen noch die Abfragen, ob das zip-archiv erstellt werden konnte, ...
 
Soo! Ich habe meinen Code nochmal local auf meinem Computer getestet und da funktioniert das entpacken wunderbar, egal ob ich von php erstellte zip-Archive oder per Hand erstellte nehme.
Auf meinem Webspace hingegen funktionieren nur kleinere zip-Dateien..
Anscheinend liegt es wirklich an irgendeiner Größenbeschränkung, aber das memory_limit kanns doch gar nicht sein, oder?
Der kleinere Wert beträgt ja immerhin 32MB, meine zip-Datei ist aber nur 22MB groß..

Zur Zeit sehe ich als Lösung meines Problems nur die Aufteilung des Inhalts auf mehrere, kleine zip_archive, aber das möchte ich eigentlich nicht haben..

Gibt es außer memory_limit noch andere Einstellungen, die für die Beschränkungen verantwortlich sein könnten?

Lg LoD123
 
Du musst bedenken, dass die ZIP Datei 22 MB groß ist.
Entpackt ist sie größer... Und während des Entpackens wird sowohl die Zip Datei als auch das Entpackte in den Arbeitsspeicher geladen.

Teste das ganze doch mal lokal mit [phpf]memory_get_usage[/phpf].
Im Leerlauf, dann nach Öffnen des Zip Archivs und dann nach Entpacken. Dann dürftest du eine ungefähre Vorstellung davon haben.
 
Du musst bedenken, dass die ZIP Datei 22 MB groß ist.
Entpackt ist sie größer... Und während des Entpackens wird sowohl die Zip Datei als auch das Entpackte in den Arbeitsspeicher geladen.

klingt soweit logisch..

Was mich aber verwundert, ist, dass mir memory_get_usage nur Werte zwischen 130000 und 160000 (mit real_usage auf true konstante 262144) anzeigt. Laut php.net sollte der Rückgabewert in Bytes ausgegeben werden, aber dann würde mein Code ja keinen einzigen MB verbrauchen..?


Was mir übrigens grad noch aufgefallen ist, ist dass meine lokale memory_limit-Voreinstellung auch 32M ist..
 
Am Speicher wird es nicht liegen, da der Fehlercode auf einen Lesefehler hindeutet.
Probier mal das Archiv ebenfalls mit der ZipArchive-Klasse wieder zu öffnen.
 
Zurück