PHP (grote) bestanden downloaden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ricardo -

- Ricardo -

02/10/2010 21:32:19
Quote Anchor link
Beste,

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
 
PHP hulp

PHP hulp

19/04/2024 22:43:53
 

02/10/2010 21:35:42
Quote Anchor link
Je script stop al voordat die acht gig gedownload is.
Wat je ook wilt doen.
php lijkt mij niet de oplossing.
 
- Ricardo -

- Ricardo -

02/10/2010 21:39:35
Quote Anchor link
Ok, dan maar via SSH een wget uitvoeren.
 

02/10/2010 21:41:07
Quote Anchor link
Wat ben je van plan?
Back-up zeker?
 
Niek s

niek s

03/10/2010 00:19:34
Quote Anchor link
Ricar do: In principe schrijft PHP toch naar /tmp ? Ben er niet zeker van. Natuurlijk is er een buffer in het geheugen, maar kan me niet voorstellen dat daar de complete inhoud naar toe gaat...
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
 
Daan Onbekend

Daan Onbekend

03/10/2010 10:38:13
Quote Anchor link
Je kunt ook vanuit PHP een wget uitvoeren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
exec('wget http://example.com');
?>
 

03/10/2010 11:07:31
Quote Anchor link
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.
 
Martijn B

Martijn B

03/10/2010 11:21:32
Quote Anchor link
Knip en plak uit mijn winkeltje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
# Bied het export bestand ter download aan
header('Pragma: no-cache');
header('Content-Description: File Transfer');
header('Content-Type: ' . $sMimetype . '; name="' . $sFileName . '"');
header('Content-disposition: attachment; filename=' . $sFileName);

readfile($sFullPath);
?>


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
 
- Ricardo -

- Ricardo -

03/10/2010 11:22:34
Quote Anchor link
Er moeten bestanden gedownload worden voor gameservers die daarna uitgepakt worden en geïnstalleerd etc. Ik heb het nu inderdaad met

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
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 ;)
 
Niek s

niek s

03/10/2010 12:51:44
Quote Anchor link
een tip: zet een & achter de regel.
Mocht je PHP script toch uitvallen, blijft die wget tenminste als een daemon doordraaien tot-ie klaar is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.