Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] ZipArchive

Pagina: 1
Acties:

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Hoi,

ik ben bezig met een scriptje dat ZIPfiles unzipt... de zipfiles bevatten altijd 6 sub-ZIPfiles... in deze subZIPfiles zitten 1 of meer XML files met data... de max grootte van een XML file (uitgepakt) is 20Mb (ingepakt een compressie van ongeveer 95%)... de grootste hoofdZIPfile is totaal 29 Mb.... (dit om een indicatie te geven van de groottes)...

het scriptje werkte prima... eerst werd het 29 Mb bestand geunzipt en daarna de losse zipfiles die zich daarin bevonden.... daarna was het script klaar... als ik dan F5 doe in de browser gaat het script verder met de volgende ZIP file...
dit ging voor een 6-tal hood-ZIPfiles goed.... en daarna deed het script het niet meer....

de code:
PHP:
1
2
3
4
5
6
        $zip = new ZipArchive();
    $zipresult = $zip->open($main_zipfile);
        if ($zipresult){
                 $zip->extractTo($outputdir);
                     $zip->close();
                }


toelichting op code:
- $outputdir is de directory waar alles in uitgepakt wordt... deze directory heeft rechten 777
- het gaat fout bij extractTo... als ik het resultaat van extractTo print, zegt hij TRUE... maar als ik dan in de outputdir kijk staan er geen bestanden

mijn eerste gedachte was dat de hoofdZIPfile die aan de beurt was corrupt was... ik ging dus de volgende verwerken... maar dat werkte ook niet... toen dacht ik, dan ga ik er 1 verwerken die al eerder gelukt is (outputdir leeggemaakt om "file_exists" problemen te voorkomen)... maar ook die gaf TRUE voor de extract, maar pakte geen bestanden uit....

mijn tweede gedachte toen was: misschien zijn de rechten van mijn directory ineens gewijzigd (zou heel gek zijn, maar toch maar even checken).. maar nee, die staan nog steeds op 777...

de derde gedachte was dat ik geen schijfruimte meer had op mijn account... maar ik heb nog 25% van 6 Gb ruimte over... dus dat kan het ook niet zijn... het bestand dat aan de beurt was was slechts 400 kb groot... een van de kleinere bestanden uit de reeks

toen ben ik gaan googlen... een alternatieve oplossing was:
PHP:
1
    system("unzip " . $main_zipfile . " -d " . $outputdir);


maar helaas, het system commando is door mijn hosting provider geblokkeerd (lijkt me ook terecht).

het enige dat in mijn hoofd dan overblijft is dat ik op 1 of andere manier "te veel" bestanden heb ge-unzipt en daarom niet meer "mag" unzippen... ik kan alleen niet verklaren waarom en vooral hoe.... misschien dat ik teveel of tevaak de /tmp map heb gebruikt (weet niet of ZIParchive deze gebruikt?)... als ik een listing (via php code, via FTP kan ik niet bij /tmp en via SSH mag ik niet inloggen) doe van /tmp krijg ik 774 bestanden... waarvan de meeste php-sessie-id's zijn en captcha gifs... die laatste (en ook nog een hoop andere files) komen in ieder geval niet van mijn site af... die gebruik ik niet....

hoe dan ook, ik heb geen flauw idee wat ik nu nog kan proberen om het script werkend te krijgen...
heeft iemand nog een idee of een wijsheid? :)

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Alle foutmeldingen aanzetten en kijken wat er fout gaat.

Een tip, in welke richting je volgens mij moet zoeken: een php script heeft een max execution time en een geheugen limiet. Ook is de server dikwijls beperkt in het aantal MB een uploadfile kan zijn. Maar dat soort zaken komen wel naar boven als je gaat debuggen.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
kluyze schreef op zaterdag 19 januari 2013 @ 00:23:
Alle foutmeldingen aanzetten en kijken wat er fout gaat.

Een tip, in welke richting je volgens mij moet zoeken: een php script heeft een max execution time en een geheugen limiet. Ook is de server dikwijls beperkt in het aantal MB een uploadfile kan zijn. Maar dat soort zaken komen wel naar boven als je gaat debuggen.
ik had al alle foutmeldingen aangezet, en het max geheugen gebruik en de max execution time opgehoogd... maar daar zit het probleem zeker niet.. .als ik na de extractTo een print doe, wordt die ook keurig geprint...

max execution time en max geheugen lijkt me sowieso geen sprake van... de allereerste file was 29 Mb en ging prima daarna kwam een file van 3 mb... ook prima... toen 6 mb, toen 5 mb toen 33 kb, toen 55 kb en daarna ging het mis bij een file van 90 kb.... (NB: genoemde files zijn NIET in 1 php run uitpakt, maar iedere keer apart)... dus bij een relatief klein bestand gaat het mis... daarna heb ik NOGMAALS 1 van de reeds gelukte bestanden proberen uit te pakken, maar dat ging ook niet meer...

over foutmeldingen: probleem is dus dat er GEEN foutmelding is... zipArchive::open() geeft TRUE en zipArchive::extractTo() geeft ook TRUE als resultaat... als je daarop googled zie je dat dit voorkomt als er bijv. geen permissions zijn op de output map... maar ook die is zeker weten 777....

de files worden NIET geupload, althans, niet via de browser... maar ik zet ze gewoon via FTP in een map....

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Ik denk dat mijn vermoeden met een max te verwerken hoeveelheid bestanden nog wel eens waar kan zijn... het is nu na 12-en... en nu doet het script ineens weer wel... zonder iets gewijzigd te hebben...

iemand enig idee waar dit door komt en hoe ik dit kan oplossen? Als ik namelijk maar 40 Mb aan zipfiles per dag kan verwerken, dan heb ik een probleem :) (niet dat ik iedere dag zoveel zipfiles moet verwerken, maar eens in de x tijd krijg ik een hele hoop zipfiles te verwerken en die wil ik dan wel graag in korte tijd kunnen verwerken...

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

P.O. Box schreef op zaterdag 19 januari 2013 @ 01:02:
iemand enig idee waar dit door komt en hoe ik dit kan oplossen?
Contact opnemen met je host en indien nodig verhuizen naar een omgeving met meer resources en/of meer beheermogelijkheden, zoals een VPS. Ontwikkelen op een shared hosting account lijkt me sowieso vragen om problemen.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


  • Kalentum
  • Registratie: Juni 2004
  • Nu online
In jou stukje voorbeeldcode staat een if($zipresult) en slaagt altijd. Dus ook als het openen van de zipfile mislukt zal die if altijd true zijn. open() geeft namelijk TRUE terug of een errorcode. Dus in jou voorbeeldcode controleer je niet of het openen van de zip succesvol is of niet.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
rutgerw schreef op zaterdag 19 januari 2013 @ 15:19:
In jou stukje voorbeeldcode staat een if($zipresult) en slaagt altijd. Dus ook als het openen van de zipfile mislukt zal die if altijd true zijn. open() geeft namelijk TRUE terug of een errorcode. Dus in jou voorbeeldcode controleer je niet of het openen van de zip succesvol is of niet.
dat is inderdaad een foutje in de code, maar helaas niet de oplossing voor het probleem...
Pagina: 1