假设我有一个大文件,我希望使用PHP和curl将HTTP POST发送到Web服务。该文件大于我可以让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标题,但没有运气。
它适用于多部分,但我需要一个原始的POST请求,没有多部分:
$post['file'] = "@large.jpg";
curl_setopt($c, CURLOPT_POSTFIELDS, $post);
答案 0 :(得分:3)
PHP / CURL绑定支持CURLOPT_READFUNCTION选项,该选项允许您使用该回调传递数据以发送chunk-by-chunk。
与此C示例中显示的逻辑完全相同: http://curl.haxx.se/libcurl/c/post-callback.html