CURL PHP отправить изображение - PullRequest
18 голосов
/ 08 августа 2010

Получить изображение с сервера тривиально, но я думаю о другом.Это сумасшедший вопрос, но ... Можно ли отправить файл (изображение) на сервер, но без использования загрузки формы или FTP-соединения?Я хочу отправить запрос например.http://www.example.com/file.php с двоичным содержимым.Я думаю, что мне нужно установить заголовок Content-type image / jpeg, но как добавить контент в мой запрос?

Ответы [ 4 ]

21 голосов
/ 08 августа 2010

Существует несколько способов использования curl для загрузки файлов изображений, например ::10000

$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

10 голосов
/ 08 августа 2010

см. http://docs.php.net/function.curl-setopt:

CURLOPT_POSTFIELDS Полные данные для отправки в HTTP-операции «POST». Чтобы опубликовать файл , добавьте @ к имени файла и используйте полный путь.Это может быть либо передано в виде строки в кодировке urlen, например, 'para1 = val1¶2 = val2 & ...', либо в виде массива с именем поля в качестве ключа и данными поля в качестве значения.Если значение является массивом, заголовок Content-Type будет установлен в multipart / form-data.
2 голосов
/ 21 июня 2018

Единственный код работал для меня с 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 за ответ и этот источник .

0 голосов
/ 08 августа 2010

VolkerK совершенно прав, но мой опыт подсказывает, что при отправке файла оператор «@» будет работать только с массивами.

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

Теперь вы можете отправить файл, используя CURLOPT_POSTFIELDS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...