PHP (grote) bestanden downloaden
Ik moet met PHP .rar bestanden gaan downloaden. Nu kan dat met file_get_contents en dan opslaan of fopen of iets dergelijks, maar het gaat om bestanden van misschien wel 8 gb. Nu is het volgens mij zo, dat PHP tijdens het downloaden van het bestand, het bestand in het geheugen laad, en na het downloaden pas opslaat. Maar met bestanden van 8 gb is dat dus een probleem omdat het geheugen vol is voordat het bestand gedownload is, want mijn geheugen is geen 8gb.
Weet iemand er meer van hoe dat zit met in het geheugen schrijven? En hoe ik het kan oplossen ?
Alvast bedankt!
Ricardo
Wat je ook wilt doen.
php lijkt mij niet de oplossing.
Ok, dan maar via SSH een wget uitvoeren.
Back-up zeker?
Tevens is er altijd nog zoiets als een memory swap. Mocht PHP zo bagger gecode zijn dat alles inderdaad eerst naar je RAM gaat, wat dus kudt zou zijn en me erg onwaarschijnlijk lijkt, kan je OS altijd nog naar je disk swappen.
Edit: Ik bedenk me nu dat je dit natuurlijk wel zelf in de hand hebt, ik was even verward met een upload.
Je kan natuurlijk erg gemakkelijk zelf een loopje maken die 1024 per iteration leest, en dan meteen wegschrijft. Je RAM gebruik is dan niet veel he ? ;)
Waarschijnlijk is een wget wel makkelijker, maar via php kan dus ook wel.
Oh, en over dat je script "toch wel stopt" (referring @ Karl): set_time_limit
Gewijzigd op 03/10/2010 00:33:08 door niek s
Niek s op 03/10/2010 00:19:34:
Oh, en over dat je script "toch wel stopt" (referring @ Karl): set_time_limit
Natuurlijk kan het wel, maar jij weet ook wel dat hij dat beter niet kan doen (want hij zit nu al met problemen) en het vast ook voor iets is als back-ups. Dat laat je php niet afhandelen.
Code (php)
Is dit niet hetzelfde als het bestand met je browser downloaden? Ik weet niet of hier dan een limit aanzit maar hier heb ik nog geen problemen mee gehad.
Gewijzigd op 03/10/2010 11:23:24 door Martijn B
Code (php)
1
2
3
2
3
<?php
exec('wget -P /var/serverfiles/ --limit-rate=8m ftp://ftp2.nl.freebsd.org/speedtest/10mb.bin');
?>
exec('wget -P /var/serverfiles/ --limit-rate=8m ftp://ftp2.nl.freebsd.org/speedtest/10mb.bin');
?>
Handige bijkomstigheid was dat je nu ook een download snelheid throttle kan geven waardoor niet de hele serverdownlink wordt gebruikt waardoor alle gameservers zouden gaan laggen ;)
Mocht je PHP script toch uitvallen, blijft die wget tenminste als een daemon doordraaien tot-ie klaar is.