0

ご挨拶、

完全なURLを指定してcurlリクエストを送信する方法を探しています。私が見つけることができるすべての例とドキュメントは、次のようになります。

$fullFilePath = 'C:\temp\test.jpg';
$upload_url = 'http://www.example.com/uploadtarget.php';
$params = array(
    'photo'=>"@$fullFilePath",
    'title'=>$title
);      

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $upload_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);

問題は、ファイル「test.jpg」が実際にはサーバー上のスクリプトによって動的に生成されることです(したがって、ファイルシステムには存在しません)。

$ file = "http://www.mysite.com/generate/new_image.jpg"を使用する代わりに、リクエストを送信するにはどうすればよいですか?

頭に浮かんだ解決策の1つは、fopenまたはfile_get_contents()を使用して「new_image.jpg」をメモリにロードすることでしたが、その時点に到達すると、POSTとして別のサイトに送信する方法がわかりません。

4

1 に答える 1

1

最も簡単な解決策は、ファイルを一時的な場所に書き込み、cURLリクエストが完了したらファイルを削除することです。

// assume $img contains the image file
$filepath = 'C:\temp\tmp_image_' . rand() . '.jpg'
file_put_contents($filepath, $img);
$params = array(
    'photo'=>"@$filepath",
    'title'=>$title
);    
// do cURL request using $params...

unlink($filepath);

競合状態を回避するために乱数を挿入していることに注意してください。画像が特に大きくない場合md5($img)は、ファイル名に、の代わりに使用することをお勧めします。rand()これでも衝突が発生する可能性があります。

于 2011-05-25T19:13:30.527 に答える