0

cURL を使用してファイルをアップロードする方法について多くの例を見てきました (cURLを使用してファイルを送信するのがおそらく必要なものに最も近い) が、何らかの理由でスクリプトが機能しません。

私が達成しようとしていること:SERVER2からファイルアップロードフォームをカールし、SERVER1に表示します。このフォームからアップロードするファイルを選択し、フォームを送信しますが、SERVER1 に送信し、$_POSTS と $_FILES を取得してから、SERVER2 のフォーム処理スクリプトへの送信を cURL し、結果を SERVER1 に表示します。

つまり、SERVER2 でファイルのアップロードと処理のインターフェイスが動作していますが、すべてが SERVER1 で行われているように見せる必要があります。

これは、SERVER1 に関連するコードとして私が持っているものです。

//loop through submitted files
foreach ($_FILES as $k => $v) {
    $settings[$k] = '@'.$v['tmp_name'];
}

$settings = http_build_query($settings);
$cookie= WP_CONTENT_DIR.'/plugins/myPlugin/cookie.txt';
//SERVER1 is a WORDPRESS site

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $settings);    

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);     
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

$response = curl_exec($ch);

$response (print_r($_FILES) を含む) を出力すると、ファイルが空の配列として表示され、次のエラーが生成されます: Warning: file_get_contents(@/tmp/phpFITW6K): failed to open stream: No such file orディレクトリ。

私は何が欠けていますか?一部の cURL の例で http_build_query が欠落しており、代わりに配列が渡されていることに気付きましたが、「POST リクエストでリクエスト データを許可していないか、リクエストで提供されたデータの量が容量制限を超えています。」 http_build_query 行。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

0

http_build_query() を削除し、ファイル名の前に「@」を付けたままにしました。「POSTリクエストでリクエストデータを許可しないか、リクエストで提供されたデータの量が容量制限を超えています」というエラーを修正した理由はよくわかりませんが、SERVER2でファイルが受信され、適切に解析されるようになりました.

于 2013-06-21T15:13:54.207 に答える