2011-08-05 9 views
0

とカール使用してプレーンテキストと一緒に変数からポストバイナリ:私はバイナリのみ投稿の知っているPHP

$file_contents = file_get_contents("http://example.org/image.jpg"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_contents); 

だけでなく、ディスク上のファイルからバイナリと一緒にテキストを投稿:

curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    "name" => "peter", 
    "msg" => "hello", 
    "foo" => "@file/on/disk/image.jpg" 
)); 

しかし、私が理解できないことは、バイナリデータを変数(例えば$ file_contents)からプレーンテキストのキーと値のペアとともに直接投稿する方法です。これはカールで可能ですか?

私は、FacebookのAPIを使用してイベントを作成し、残りのイベントデータに沿ってイメージをアップロードする必要があるという理由から尋ねています。私はインターネットから画像を取得しているので、投稿する前にディスクに保存してからディスクから削除する必要はなく、代わりにファイルに保存されたfile_get_contents()のデータを使って直接投稿しますPHP変数。

+0

から検索することができますか? – Robus

+0

よく、不要なステップのように思えますが、一意のファイル名などを選択する必要があります。 – mb21

+0

@ mb21: 'tempnam()'がそれを行います。感謝! –

答えて

1

URLにクエリ文字列としてパラメータを渡し、ポストフィールドにバイナリデータを渡すことができます。受信側で すべてのパラメータは、単に一時的にファイルを保存した後、それを削除すると間違って何$ _REQUEST

$file_contents = file_get_contents("http://example.org/image.jpg"); 

$c = curl_init(); 
curl_setopt($c, CURLOPT_URL, 'http://example.com/test.aspx?name=peter&msg=hello'); 
curl_setopt($c, CURLOPT_POSTFIELDS, $file_contents); 
curl_setopt($c, CURLOPT_POST, 1); 
curl_setopt($c, CURLOPT_VERBOSE, 0); 
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 0); 
$cResponse = curl_exec($c); 
curl_close($c); 
関連する問題