web-dev-qa-db-ja.com

CURL PHP画像を送信

サーバーから画像を取得するのは簡単ですが、私は別のことを考えています。クレイジーな質問ですが...ファイル(画像)をサーバーに送信することはできますが、フォームのアップロードやftp接続を使用することはできませんか?例えばにリクエストを送りたいです。 http://www.example.com/file.php バイナリコンテンツ付き。 Content-typeヘッダーimage/jpegを設定する必要があると思いますが、リクエストにコンテンツを追加するにはどうすればよいですか?

18
xxxZonexxx

curlを使用して画像ファイルをアップロードする方法は複数あります。例:

$ch = curl_init();
$data = array('name' => 'Foo', 'file' => '@/path/to/image.jpeg');
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0
//So next line is required as of php >= 5.6.0
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);

次の場所で例を確認できます: http://au.php.net/manual/en/function.curl-setopt.php

21
Andy Lin

http://docs.php.net/function.curl-setopt を参照してください:

CURLOPT_POSTFIELDS HTTP「POST」操作で投稿する完全なデータ。 ファイルを投稿するには、ファイル名の前に@を付け、フルパスを使用します。これは、「para1 = val1&para2 = val2&...」のようなurlencoded文字列として、またはフィールド名をキーとして、フィールドデータを値として持つ配列として渡すことができます。値が配列の場合、Content-Typeヘッダーはmultipart/form-dataに設定されます。
10
VolkerK

PHP 7.0で動作する唯一のコード

$file = new \CURLFile('@/path/to/image.jpeg'); //<-- Path could be relative
$data = array('name' => 'Foo', 'file' => $file);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0
//So next line is required as of php >= 5.6.0
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);

@AndyLinの回答とこれに感謝します ソース

2
Husam

VolkerKは完全に正しいですが、私の経験では、ファイル「@」演算子の送信は配列でのみ機能することを示唆しています。

$post['file'] = "@FILE_Path"

これで、CURLOPT_POSTFIELDSを使用してファイルを送信できます。

0
Shubham