PHP Abbruch beim Erstellen einer großen ZIP-Datei

9

Mein PHP-Skript läuft auf CentOS 5.6 und PHP 5.2.12 mit ZipArchive () und erstellt erfolgreich .zip-Dateien über 1.6Gb, aber nicht für ein größeres Archiv von 2GB oder größer - PHP bricht ohne offensichtlichen Fehler ab. Nichts im PHP-Fehlerprotokoll oder stderr. Das Skript wird in der Befehlszeile und nicht interaktiv ausgeführt.

Das Skript läuft für etwa 8 Minuten und das temporäre Archiv wächst und während der Überprüfung der Dateigröße zeigte die letzte Auflistung, dass die tmp-Datei 2120011776 groß war und dann verschwand die tmp-Datei und das PHP-Skript fällt durch die Logik und führt den Code danach aus das Archiv erstellen.

Aus irgendeinem Grund zeigt top die CPU immer noch bei 95% an und erstellt eine neue tmp-Archivdatei - sie macht dies für sagenhafte 5+ min und stoppt still und hinterlässt die nicht abgeschlossene tmp-Archivdatei. In diesem Test gab es weniger als 4000 erwartete Dateien.

Das Skript funktioniert wie beschrieben, indem es kleinere Archivdateien erstellt.

Getestet auf mehrere verschiedene Sätze großer Quelldaten - dasselbe Ergebnis für große Dateien.

Dieses Problem klingt ähnlich wie diese Frage: Größenbeschränkung für die zipArchive-Klasse von PHP?

Ich dachte, vielleicht würde der Befehl ls -l eine Anzahl von 2K-Blöcken zurückgeben und somit wäre 2120011776 nahe an 4GB, aber diese Größe ist in Bytes - die Größe der xxxx.zip.tmpxx-Datei.

Danke!

    
blainelang 21.04.2011, 14:09
quelle

4 Antworten

2

Es könnte viele Dinge geben. Ich nehme an, dass Sie genügend freien Speicherplatz haben, um den Prozess zu verarbeiten. Wie andere bereits erwähnt haben, könnte es einige Probleme geben, die entweder durch Bearbeiten der Datei php.ini oder durch Verwendung der Funktion ini_set () im Code selbst behoben wurden.

Wie viel Speicher hat Ihre Maschine? Wenn es Ihren tatsächlichen Speicher erschöpft, dann macht es Sinn, dass es regelmäßig ab einer bestimmten Größe abbrechen würde. Überprüfen Sie daher die freie Speicherbelegung vor dem Skript und überwachen Sie sie, während das Skript ausgeführt wird.

Eine dritte Option könnte auf dem Dateisystem selbst basieren. Ich habe nicht viel Erfahrung mit CentOS, aber einige Dateisysteme erlauben keine Dateien über 2 GB. Obwohl es auf der Produktseite scheint, dass die meisten Systeme auf CentOS damit umgehen können.

Eine vierte Option, die am vielversprechendsten erscheint, erscheint, wenn Sie sich die oben verlinkte Produktseite ansehen, ein weiterer möglicher Täter ist "Maximaler x86-pro-Prozess-virtueller Adressraum", der ungefähr 3 GB beträgt. x86_64 ist ungefähr 2 TB, also prüfe den Typ des Prozessors.

Auch hier scheint die vierte Option der Schuldige zu sein.

    
Shawn Patrick Rice 11.02.2014 06:44
quelle
-1

Haben Sie set_limit Variablen in PHP verwendet?

Sie können das verwenden. Htacess oder innerhalb des PHP-Skripts. Innerhalb des Skripts set_time_limit (0); Innerhalb des .htaccess php_value memory_limit 214572800;

    
user3246030 28.01.2014 20:04
quelle
-1

Wenn Ihre Dateigröße groß ist, wird es einige Zeit dauern, bis die Archiv-ZIP-Datei erstellt wird, aber in PHP (php.ini) wird die maximale Ausführungszeit festgelegt. Sie müssen also versuchen, diesen Wert zu erhöhen.

    
PrivateAgent 28.02.2014 05:32
quelle
-2

Es gibt eine Einstellung in der maximalen Ausführungszeit von php.ini vielleicht wird das gefeuert!
versuche den Wert zu erhöhen!

Es gibt auch andere Dateigrößenbeschränkungen für OS, versuchen Sie das auch zu überprüfen!

    
Sourav 21.04.2011 14:12
quelle

Tags und Links