2013-02-28 12 views
8

Ich möchte eine Datei mit cURL hochladen. Da cURL in die Datei vollständigen Pfad erfordert so hier ist mein Code:Ändern Sie den Namen der Upload-Datei in cURL?

curl_setopt($ch, CURLOPT_POSTFIELDS, array("submit" => "submit", "file" => "@path/to/file.ext")); 
curl_exec($ch); 

Allerdings wird Curl-Pfosten auch diesen vollständigen Pfad der Datei im Request-Header:

Content-Disposition: form-data ; name = "Datei"; filename = "/ path/to/file.ext"

Aber ich will es nur

Content-Disposition sein: form-data; name = "Datei"; filename = "file.ext"

So wechsle ich den Code

curl_setopt($ch, CURLOPT_POSTFIELDS, array("submit" => "submit", "file" => "@file.ext")); 
chdir("path/to"); # change current working directory to where the file is placed 
curl_exec($ch); 
chdir("path"); # change current working directory back 

Und dann einfach cURL löst eine Fehlermeldung

konnte die Datei nicht öffnen "file.ext"

Kann mir bitte jemand sagen, wie es geht?

Antwort

16

Neue Methode (seit PHP 5.5) mit CURLFile:

$file = new CURLFile('path/to/file.ext'); 
$file->setPostFilename('file.ext'); 

es verwenden fast das gleiche:

"file" => $file 

Alte Methode:

Statt

"file" => "@path/to/file.ext" 

Sie cURL sagen können einen anderen Dateinamen zu verwenden:

"file" => "@path/to/file.ext; filename=file.ext" 

diese Weise ist es path/to/file.ext als Dateiquelle verwenden, aber file.ext als Dateiname.

Sie werden jedoch einen sehr absoluten Pfad benötigen, so dass Sie wahrscheinlich eine führende /: /path/to/file.ext verpassen.Da Sie PHP verwenden, tun immer ein realpath():

"file" => '@' . realpath($pathToFile) . '; filename=' . basename($pathToFile); 

Oder so ähnlich.

+0

Welche Version von PHP ist dafür erforderlich? – Jeroen

+0

Beliebig. Die Version von cURL könnte von Bedeutung sein, wahrscheinlich aber nicht. Hast Du es versucht? Versuch es. – Rudie

+0

Ja, ich habe es jetzt zur Arbeit gebracht. Vielen Dank! +1 – Jeroen

0

Sie müssen die Datei in einen temporären Bereich stellen und dann von dort auf die Datei verweisen, wenn Sie den tatsächlichen Speicherort der Datei verbergen möchten. Leider unterstützt cURL nicht nur das Senden von binären Daten, oder Sie können einfach die base64- oder binäre Datenzeichenfolge anstelle einer Dateinamenreferenz senden.

8

Bitte korrigieren Sie mich, wenn ich falsch liege, aber cURL Upload funktioniert nicht mit relativen Pfad. Es braucht immer einen absoluten Pfad, mag

$realpath = realpath($uploadfile); 

Also, wenn jemand will, um den Ort zu seiner Akte auf seinem Webserver verstecken, wenn das Hochladen, entweder in einen temporären Ordner verschieben oder verwenden fsockopen() (siehe diese example in PHP Benutzerhandbuch Hinweise Bereitgestellt)

+0

danke gelöst mein Problem des Tages :) – wayzz

Verwandte Themen