2016-04-03 20 views
0

Ich versuche, eine Datei mit PHP und cURL herunterladen. Ich erhalte die URL, um die Datei über eine Reihe von cURL-Anfragen herunterzuladen.Problem beim Herunterladen der Datei mit PHP

Wenn ich versuche, die Datei herunterzuladen, erhalte ich eine leere Datei. Siehe unten das entsprechende Stück Code:

... 
$output = curl_exec($ch); 
curl_close($ch); 
$regex = '/\b(https?|ftp|file):\/\/resources\.lendingclub\.com\/secure[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
preg_match_all($regex, $output, $parts); 
$url3a = $parts[0][0]; 
OutputMsg($url3a); //print the content of $url3a 
DownloadFile($url3a, 'testfile.zip'); //downloads the file using a cURL request 
... 

Dies erstellt die Datei testfile.zip mit NULL Bytes. Und gibt die folgenden auf den Bildschirm:

https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631 

Wenn ich eine Linie (siehe unten) hinzufügen

... 
$output = curl_exec($ch); 
curl_close($ch); 
$regex = '/\b(https?|ftp|file):\/\/resources\.lendingclub\.com\/secure[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; 
preg_match_all($regex, $output, $parts); 
$url3a = $parts[0][0]; 
//line added below 
$url3a = 'https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631'; 
OutputMsg($url3a); //print the content of $url3a 
DownloadFile($url3a, 'testfile.zip'); //downloads the file using a cURL request 
... 

die Datei korrekt heruntergeladen und auf dem Bildschirm gibt das gleiche wie zuvor:

https://resources.lendingclub.com/secure/LoanStats3a_securev1.csv.zip?signature=cmu73mJsyNhznZMBH6B%2FsFjoNuE%3D&issued=1459663950631 

Ich bin ratlos, warum das erste Beispiel oben nicht funktioniert und das zweite Beispiel. Das einzige, was ich getan habe, war, die URL einzugeben und sie der Variablen zuzuweisen.

Ich kann mehr Code zur Verfügung stellen, einschließlich der DownloadFile-Funktion.

Ich habe keinen Weg gefunden, damit es funktioniert, ohne dass ich die URL in den Quellcode eingeben muss.

Danke.

Antwort

0

Ich endlich herausgefunden, das Problem. Ich poste die Lösung hier für zukünftige Referenz.

Bei meinem ersten Versuch erhalte ich die URL für die Datei, die ich herunterladen wollte, indem ich die von einer cURL-Anfrage zurückgegebene HTML-Seite verschrottete.

In meinem zweiten Versuch tippte ich die URL direkt in den PHP-Quellcode.

Als ich beide auf den Bildschirm echote, sahen sie genau gleich aus.

Jedoch nach dem Spielen mit Strlen und Strpos erkannte ich, dass die erste URL hatte die "&" als "& Amp gespeichert". Beide sahen auf meinem Bildschirm genauso aus, aber sie wurden anders gespeichert.

Um das Problem zu lösen, ich die Zeile ersetzt:

$url3a = $parts[0][0]; 

mit

$url3a = htmlspecialchars_decode($parts[0][0]); 

Diese htmlspecialchars_decode Funktion ersetzt alle "& Amp" mit regelmäßigen "&".

Ich hoffe, das hilft jemand anderem.

Danke.

Verwandte Themen