Remote Datei mit cUrl speichern und weitergabe an Client

Nobert

Grünschnabel
Guten Tag,

ich hab ein kleines Problem, ich möchte Dateien welche ich mit cUrl herunterlade direkt während diese Datei noch heruntereladen wird an den Client (Benutzer) weitergeben. Ich muss cUrl verwenden weil ich 3 unterschiedliche IP-Adressen verwenden muss, aber andere Lösungen nehme ich gerne an :D . Ich kann also nicht mit readfile() alleine arbeiten weil es dann immer nur eine IP-Adresse verwendet. Hier mein PHP Code:

PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_INTERFACE, $interface_ip);
curl_setopt($ch, CURLOPT_URL, $remote_url);

// Datei auf Server schreiben
$ft = fopen($remote_file_name, 'wb');

curl_setopt($ch, CURLOPT_FILE, $ft);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_exec ($ch);
curl_close ($ch);

fclose($ft);

// Erst wenn die Datei komplett ist, wird readfile ausgeführt.

readfile($remote_file_name);

Meine Frage an euch wie kann ich die "gerade" heruntergeladene Datei direkt an den Client weitergeben, und nicht erst warten bis fopen fertig ist. Wenn ich readfile vor fclose() setze funktioniert es nicht. Die Datei größe ist bereits bekannt, nur wie kann ich dies verwenden. Mir ist schon die Idee gekommen mit Ajax zu arbeiten nur fehlt mir die Idee oder die Funktion eine Datei solange zu laden (für den Client) bis XXX Bytes erreicht sind.

Ich wäre sehr dankbar für nützliche Antworten, Anregungen oder Verbessereungen. Bitte keine Fehlersuche im gegebenen Code durchführen. Fehler können beim kopieren entstehen!

Mit freundlichen Grüßen
Nobert
 
Mh, ja was sagt man dazu. Es war eigentlich super einfach!
Ich habe jemanden gefragt und ihm viel die Lösung für das Problem sehr schnell ein.
Es ist super einfach man muss einfach was weglassen:

PHP:
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_INTERFACE, $interface_ip); 
curl_setopt($ch, CURLOPT_URL, $remote_url); 
// CURLOPT_FILE weglassen (Standard ist STDOUT (der Browser))
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
curl_exec ($ch); 
curl_close ($ch);

:D Wie peinlich, naja egal vielleicht hilft es auch anderen Leuten!

Mit freundlichen Grüßen
Nobert
 

Neue Beiträge

Zurück