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

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

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

У меня есть успех с использованием многостраничных 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, нет multiparts:

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

Связывание PHP / CURL поддерживает параметр CURLOPT_READFUNCTION, который позволяет передавать данные для отправки chunk-by-chunk с использованием этого обратного вызова.

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