2013-02-28 13 views
8

cURLを使用してファイルをアップロードします。カールはので、ここでファイルのフルパスを必要とするので、私のコードです:アップロードファイルの名前をcURLで変更しますか?

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

しかしカールはまた、リクエストヘッダにファイルのこのフルパスを掲載します:

コンテンツディスポジション:フォームデータを; name = "file";ファイル名= "/パス/に/ file.extに含ま"

しかし、私はそれだけで

のContent-処分になりたい:フォームデータ; name = "file";ファイル名= "file.extに含ま"

だから私は

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 

にコードを変更し、カールが単にエラーメッセージをスロー

は、開いているファイル "file.extに含ま" ことができませんでした

どうすればいいですか?

答えて

16

新しい方法を寄贈:

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

はほぼ同じそれを使用します。

"file" => $file 

旧方法

代わりの

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

あなたは別のファイル名を使用するようにカールを伝えることができます:それはファイルのソースとしてpath/to/file.extを使用します

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

そうすれば、ファイル名はfile.extです。

あなたは非常に絶対的なパスを必要としますので、おそらく先頭に//path/to/file.extがありません。あなたがPHPを使用しているので、常にrealpath()の操作を行います。

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

またはそのような何か。

+0

これにはどのバージョンのPHPが必要ですか? – Jeroen

+0

。 cURLのバージョンは重要かもしれませんが、おそらくそうではありません。それを試しましたか?それを試してみてください。 – Rudie

+0

はい私は今働くことにしました。ありがとう! +1 – Jeroen

0

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

8

私が間違っている場合は私を修正してください。ただし、cURLアップロードは相対パスでは動作しません。それは、常に(PHPでこのexampleを参照)のいずれか、誰かがアップロード時に彼のウェブサーバ上の自分のファイルに場所を隠したいのであれば

$realpath = realpath($uploadfile); 

が好き、絶対パスを必要とする一時フォルダに移動したり(fsockopenの使用しますマニュアルのユーザーは、Notes)CURLFileを使用して()PHP 5.5以降

+0

ありがとうございました:) – wayzz

関連する問題