2011-03-10 98 views
3

可以说我有一个很大的文件,我想通过PHP和curl将HTTP POST发送到webservice。该文件大于我可以让PHP使用的内存量。如何通过流式传输文件使用PHP,curl和HTTP POST上传文件?

基本上我正在寻找一种方法来直接流动文件的内容来卷曲,而无需将整个文件读入内存。

我已经成功地使用了多部分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请求,没有multipart内容:

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

在这种情况下你可能最好的一个自定义的fsockopen块。它只需要一个POST头部blob,以及fread/fwrite的简单循环。 – mario 2011-03-10 14:32:26

+0

任何原因你不能只是SCP文件? PECL有一个ssh库.. – 2011-03-10 14:33:40

回答

3

的PHP /卷曲结合支持CURLOPT_READFUNCTION选项,它允许您将数据传递给发送块逐使用该回调的块。

差不多完全按照该C例子显示相同的逻辑: http://curl.haxx.se/libcurl/c/post-callback.html

+0

看起来很有希望,我会试试看。谢谢! – hovenko 2011-03-13 17:57:53