Допустим, у меня есть большой файл, который я хочу 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