Ich muss die Remote-Datei mit Curl herunterladen.
Hier ist der Beispielcode, den ich habe:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$st = curl_exec($ch);
$fd = fopen($tmp_name, 'w');
fwrite($fd, $st);
fclose($fd);
curl_close($ch);
Es kann jedoch keine großen Dateien verarbeiten, da es zuerst in den Speicher liest.
Ist es möglich, die Datei direkt auf die Festplatte zu streamen?
fwrite
die Daten manuell verwenden müssen, da Sie sie verwendenCURLOPT_FILE
.fwrite
AND nicht verwendenCURLOPT_FILE
. Das zu bestehen$fp
ist genug. Ich habe beides getan und bin1
am Ende des Inhalts in der Datei gelandet.fwrite
Ich benutze diese praktische Funktion:
Wenn Sie es mit einem 4094-Byte-Schritt herunterladen, wird Ihr Speicher nicht voll
Verwendung:
Sie können dann überprüfen, ob alles in Ordnung ist mit:
quelle
fopen()
Rückgabe falsch und Timeout Sie setzen es in die while-Schleife (rufen Sie antime()
und rechnen Sie )stream_copy_to_stream
anstatt Inhalte manuell zu kopieren, macht einen kürzeren Code. Weder dies noch das funktionieren mithttps
(es sei denn, Sie legen a fest$context
). Konzertieren Sie den prozeduralen Stil - Dateifunktionen sind auch nicht ganz OOP, und wenn Sie Curl-Optionen in ein Array einfügen, sieht es sowieso viel sauberer aus.Suchen Sie den folgenden Code, wenn Sie den Inhalt der angegebenen URL herunterladen und in einer Datei speichern möchten.
Wenn Sie Dateien vom FTP-Server herunterladen möchten, können Sie die PHP-FTP-Erweiterung verwenden. Nachfolgend finden Sie den Code:
quelle
Wenn
curl
zum Herunterladen einer großen Datei verwendet wird,CURLOPT_TIMEOUT
ist dies die Hauptoption, für die Sie festlegen müssen.CURLOPT_RETURNTRANSFER
muss wahr sein, wenn Sie Dateien wie pdf / csv / image usw. erhalten.Weitere Details finden Sie hier (korrekte URL) Curl Doc
Von dieser Seite:
quelle
Sie können diese Funktion verwenden, die eine Tempfile im Dateisystem erstellt und den Pfad zur heruntergeladenen Datei zurückgibt, wenn alles einwandfrei funktioniert hat:
quelle