如何使用PHP、curl和HTTP POST通过流式传输文件来上传文件?

5

假设我有一个大文件,我想使用PHP和curl将其HTTP POST到一个webservice。这个文件比我可以让PHP使用的内存还要大。

基本上,我正在寻找一种直接将文件内容流式传输到curl的方法,而不是将整个文件读入内存。

我已经成功地使用了multipart 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);

在这种情况下,您最好使用自定义fsockopen块。它只需要一个POST头部blob和一个简单的循环来进行fread/fwrite。 - mario
你为什么不能直接使用SCP传输文件呢?PECL有一个SSH库。 - Explosion Pills
1个回答

3

看起来很有前途,我会尝试一下。谢谢! - hovenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接