Как загрузить файл с PHP, curl и HTTP POST путем потоковой передачи файла? - PullRequest
3 голосов
/ 10 марта 2011

Допустим, у меня есть большой файл, который я хочу HTTP POST для веб-службы, используя PHP и curl.Файл больше, чем объем памяти, который я могу позволить PHP использовать.

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

Я успешно использую составные POST и PUT, но не загружаю «двоичные данные» с помощью POST.

Что я хочу достичь в PHP, это то, что делает эта командная строка:

 $ curl -X POST -H "Content-Type: image/jpeg" \
       --data-binary "@large.jpg" "http://example.com/myservice"

Перепробовал много опций с curl_setopt, таких как INFILE, POSTFIELDS, заголовок Content-Type, но не повезло.

Хотя он работает с multipart, но мне нужен необработанный запрос POST, без множителей:

$post['file'] = "@large.jpg";
curl_setopt($c, CURLOPT_POSTFIELDS, $post);

1 Ответ

3 голосов
/ 13 марта 2011

Привязка PHP / CURL поддерживает параметр CURLOPT_READFUNCTION, который позволяет передавать данные для отправки по частям с помощью этого обратного вызова.

Практически та же логика, что показана в этом примере C: http://curl.haxx.se/libcurl/c/post-callback.html

...