2011-09-12 23 views
0

私はphp cURLを使用して画像をアップロードしようとしています。しかし、何かそれについて間違っています。cURLファイルアップロードの問題

これはポストデータ

-----------------------------192153227918513 
Content-Disposition: form-data; name="resimbaslik" 

CCClient 
-----------------------------192153227918513 
Content-Disposition: form-data; name="imgfile"; filename="clinteastwoodo.jpg" 
Content-Type: image/jpeg 

であり、私はこのPHPコード

$postfields = array(); 
$postfields ["resimbaslik"] = "CCClient"; 
$postfields ["imgfile"] = "filename=\"clinteastwoodo.jpg\""; 
$referer = "http://www.example.com/ex1.php"; 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/example.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($ch, CURLOPT_REFERER, $referer); 
$result = curl_exec ($ch); 

そして、それは私に417 - Expectation Failedエラーを与えていると私の写真をアップロードしようとしています。 画像は自分の.phpファイルと同じディレクトリにあります。

私はそれを解決する手助けをすることはできますか?

ありがとうございます。

答えて

1

POSTしようとしているサーバはLighttpdですか? Expectヘッダーを処理する際のLightyの既知のバグがあります。詳細については、http://redmine.lighttpd.net/issues/1017をご覧ください。上記のリンクからのコメントで

、簡単な修正はPHPとcURLのために指摘されています

<?php 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:")); 
//Other setopt, execute etc... 
?> 

あなたが期待するヘッダーのために空の値を設定する必要があります。上のコードでは、curl_setopt行を追加するだけです。このようなもの:

$postfields = array(); 
$postfields ["resimbaslik"] = "CCClient"; 
$postfields ["imgfile"] = "filename=\"clinteastwoodo.jpg\""; 
$referer = "http://www.example.com/ex1.php"; 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/example.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); 
curl_setopt($ch, CURLOPT_REFERER, $referer); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Expect:")); // << add this line. 
$result = curl_exec ($ch); 
+0

No lighttp。それは私の問題を解決できませんでした。私はこれを前に試しました。そして、この投稿にヘッダーを使用するにはどうすればいいですか? –

+0

$ postfields ["imgfile"] = "ファイル名= \" clinteastwoodo.jpg \ ""; ファイルをアップロードするための@がないフィールドはありますか?また、$ postfield ['imgfile']はフォームのフィールド名になりますので、 "filename =意味がありません。 – erm3nda