2010-12-12 5 views
0

Ich muss einen einfachen Datei-Download-Client in PHP implementieren, der große Dateien herunterladen und fortsetzen kann.Herunterladen/Fortsetzen großer Dateien in PHP mit nativen PHP-Funktionen

Gibt es eine Möglichkeit, große Dateien (> 700 MB) in PHP herunterzuladen und meinen PHP-Speicher auf 128 MB zu begrenzen? Ich vermute, das hat mit dem Schreiben in einen Dateizeiger zu tun. Irgendwelche Hinweise, welche Dateihandhabungsfunktionen zu verwenden sind? es gibt so viele. Ich rate, fopen, flock, fclose. Oder sollte ich cURL verwenden?

Wie setze ich Downloads fort, die kaputt sind? Skript-Ausführungszeitlimit, Skript zum Beenden des Benutzers, Timeout des Remote-Servers usw.?

Antwort

2

Dies sollte mit cURL möglich sein, indem CURLOPT_FILE und CURLOPT_RESUME_FROMoptions eingestellt werden. Ich bin mir nicht sicher, ob cURL die Datei überschreiben oder anhängen wird, auch, ob sie die Datei im Speicher zwischenspeichert oder direkt auf die Festplatte schreibt. Möglicherweise müssen Sie dort einige Tests machen.

Wenn Sie mehr Kontrolle über den gesamten Prozess wollen, können Sie fsockopen verwenden, um eine rohe Verbindung zum Server aus Sie den Download und zu und von diesem Zusammenhang zu lesen, schreiben zu erstellen, um die normalen fread und fwrite Funktionen. Sie müssten die korrekten HTTP-Header an die Verbindung senden (fwrite), um die Übertragung einzuleiten - am wichtigsten ist die Range header für die Fortsetzung der Übertragungen - und dann ein paar Bytes mit fread lesen, dann diese in eine Datei schreiben und wiederholen, bis die Übertragung abgeschlossen ist Komplett.

0

Das Problem ist nicht PHP, es ist, wie die Datei gesendet wird. Während Sie können fopen() und fread(), etc. auf dem Server, wie würden Sie und fwrite() auf der Client-Seite? Standard Javascript können Dateien nicht öffnen, aus dem Browser, würden Sie auf anderen Methoden angewiesen sind, wie (schluck) Java applets oder eine Flash-Komponente (??) ...

Nun, da HTML5, it might be possible, es aber ist noch nicht vollständig von den wichtigsten Browsern übernommen.

+0

Klingt mehr wie das OP möchte ein PHP-Skript verwenden, um Dateien von einem anderen Server herunterzuladen. Kein Client oder Javascript beteiligt. – deceze

+0

@deceze, was lässt dich das denken? Nichts bedeutet eine solche Schlussfolgerung –

+0

"implementieren einfach ** Datei-Download-Client ** in PHP in der Lage, große Dateien herunterladen" - PHP * Herunterladen * Dateien, nicht * Serving * – deceze