15

I want to upload a file using cURL. Since cURL requires full path to the file so here is my code:

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

However cURL will also post this full path of the file in the request header:

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

But I want it to be just

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

So I change the code to

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

And then cURL simply throws an error message

couldn't open file "file.ext"

Can anybody tell me how to do it please?

4

3 に答える 3

13

間違っている場合は訂正してください。ただし、cURL アップロードは相対パスでは機能しません。常に絶対パスが必要です。

$realpath = realpath($uploadfile);

そのため、誰かがアップロード時に Web サーバー上のファイルの場所を隠したい場合は、ファイルを一時フォルダーに移動するか、 fsockopen() を使用します (このは、PHP マニュアルのユーザー投稿ノートを参照してください)。

于 2013-03-02T01:45:23.560 に答える
0

実際のファイルの場所を隠したい場合は、ファイルを一時領域に置き、そこからファイルを参照する必要があります。残念ながら、cURL はバイナリ データのみの送信をサポートしていません。そうでなければ、ファイル名参照の代わりに base64 またはバイナリ データ文字列を送信することもできます。

于 2013-02-28T04:56:41.713 に答える