[php] Zlib in php resulteert in Internal server error

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hey,

Via php en zlib wil ik grote bestanden (in het totaal tot 1gb) inpakken in één zip bestand. Hiervoor gebruik ik de Ziparchive class van php. Een voorbeeld van mijn code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php


            $zip = new ZipArchive();
            if(!$zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)) {
                return false;
            }

            $delete_files = array();

            foreach($valid_files as $file) {
                
                if($zip->addFile($file['src_name'],$file['dest_name']))
                    $delete_files[] = $file['src_name'];

            }

            $success = ($zip->status == 0) ? true : false;

            $zip->close();

            if(count($delete_files) > 0) {

                foreach($delete_files AS $value) {

                    @unlink($value);

                }

            }


            if($success AND file_exists($destination))
                return true;
            else
                return false;

?>


Wanneer ik meerdere bestanden met een totale grootte van 500mb wil inpakken in een zip bestand, krijg ik elke keer een Internal Server Error. Echter krijg ik deze melding al voordat het zip bestand is aangemaakt en nadat de error zichtbaar is wordt het zipproces voortgezet (dit is te zien op de ftp server).

Wat ik totaal niet snap en het antwoord hierop met geen mogelijkheid gevonden krijg, is waarom er een Internal Server Error ontstaat, nóg voordat het zipproces is afgerond én het zipproces wel wordt voortgezet. Het aangemaakte zip bestand is niet corrupt en bevat de correcte data.

Mijn php.ini instellingen zijn ruimschoots voldoende ingesteld, namelijk:

max_execution_time = 7200;
max_input_time = 7200;
max_input_nesting_level = 64;
memory_limit = 256M;
upload_max_filesize = 2000M;
post_max_size = 2030M;

Ook in de server logs (access log, etc.) is niets te vinden over de foutmelding (de foutmelding heeft ook niet dezelfde opmaak als een normale Internal Server Error (500)).

Heeft iemand enig idee hoe dit kan en wat mogelijk een oplossing is of in welke richting ik moet zoeken?

Bedankt

[ Voor 12% gewijzigd door radem205 op 16-11-2010 21:02 ]


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Staan al je PHP warnings al aan? error_reporting(E_ALL | E_STRICT), enzo.

Verder zou ik toch even verder zoeken in je error log; ik kan me slecht voorstellen dat er echt geen informatie instaat...

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Niet gewoon met IE met "Gebruiksvriendelijke HTTP-foutmeldingen" aan het testen?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
CodeCaster schreef op dinsdag 16 november 2010 @ 21:10:
[...]

Niet gewoon met IE met "Gebruiksvriendelijke HTTP-foutmeldingen" aan het testen?
Nee, meerdere mensen met verschillende browsers hebben dit probleem (ook in Firefox, chrome, etc.).

Uiteraard heb ik error_reporting e_all en e_strict al geprobeerd, maar zonder resultaat.

Het enige dat ie aangeeft is: "An internal server error occurred. Please try again later."

En wanneer deze foutmelding ontstaat zie ik in de map waar het zip bestand wordt aangemaakt dat de bestandsgrootte nog steeds toeneemt, wat betekent dat ie nog bezig met het zippen van de bestanden.

En ik weet niet in welke logs ik nog meer kan kijken, maar zover ik weet heb ik in alle logs die beschikbaar zijn in DirectAdmin gekeken. En de hoster heeft bij dit systeem ook belang en heeft ook alle logs nagekeken, maar ook zonder resultaat.

Kleine bestanden zippen gaat wel goed (50 - 100mb)....

Kan het wellicht zijn dat apache de sessie met de gebruiker er uit gooit door de ontstane timeout?

[ Voor 56% gewijzigd door radem205 op 16-11-2010 21:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

In dit soort situaties wil je echt gewoon een shell commando aanroepen.

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Verwijderd schreef op dinsdag 16 november 2010 @ 22:02:
In dit soort situaties wil je echt gewoon een shell commando aanroepen.
Ik heb het nu geprobeerd met het exec command (via PHP welteverstaan), maar het resulteert eveneens in een Internal server error (precies hetzelfde als de Ziparchive functie van PHP).

Ik gebruik onderstaand command:

PHP:
1
2
3
<?php
$comm = exec("zip -j /home/domein/domains/domein.nl/files/test.zip '/home/domein/domains/domein.nl/temp_files/0beb80ca6831b1de1d1522027b94225c.rar' '/home/domein/domains/domein.nl/temp_files/4acd7450c19d956e6554aa59de764cda.rar' '/home/domein/domains/domein.nl/temp_files/809cf290e2db9485ce4b5eaa0c3d4ad8.rar' '/home/domein/domains/domein.nl/temp_files/be5d2dcd0b1d6e4845c5b7ba00619e93.rar'");
?>

Wanneer bovenstaand command handmatig via SSH wordt uitgevoerd dan wordt het zip bestand zonder foutmelding aangemaakt.

Met php (en exec) wordt het bestand dus wel aangemaakt, maar ik krijg als response een Internal Server Error.

Weet iemand waar dit aan kan liggen? Want het werkt wel gewoon, maar het voelt niet goed dat er toch een foutmelding ontstaat.

[ Voor 3% gewijzigd door radem205 op 21-11-2010 19:06 ]


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Zou kunnen zijn dat de:
memory_limit = 256M;
te laag is!

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:15
radem205 schreef op zondag 21 november 2010 @ 18:53:
Ik heb het nu geprobeerd met het exec command (via PHP welteverstaan), maar het resulteert eveneens in een Internal server error (precies hetzelfde als de Ziparchive functie van PHP).
Bij een internal server error schrijft Apache altijd een reden naar de error log. Wat is die?
mocean schreef op zondag 21 november 2010 @ 22:12:
Zou kunnen zijn dat de memory limit te laag is!
Dat lijkt me sterk, want zip (de command line tool) gebruikt nauwelijks geheugen; in ieder geval niet in de tientallen of honderden megabytes. In eerste instantie vermoedde ik nog dat ZipArchive het bestand in het geheugen zou proberen te cachen, maar als het met de commandline versie ook niet werkt, gaat er dus wat anders fout.

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Het probleem is verholpen. Het bleek aan de loadbalancer te liggen die naar php al vroegtijdig een Internal Server Error stuurde. En deze internal server error is echt nergens terug te vinden in de logs.
Pagina: 1