如何通过流式传输文件上传PHP,curl和HTTP POST文件?

时间:2011-03-10 14:25:04

标签: php file curl upload stream

假设我有一个大文件,我希望使用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);

1 个答案:

答案 0 :(得分:3)

PHP / CURL绑定支持CURLOPT_READFUNCTION选项,该选项允许您使用该回调传递数据以发送chunk-by-chunk。

与此C示例中显示的逻辑完全相同: http://curl.haxx.se/libcurl/c/post-callback.html