【问题标题】:How to upload a file with PHP, curl and HTTP POST by streaming the file?如何通过流式传输文件来使用 PHP、curl 和 HTTP POST 上传文件?
【发布时间】:2011-07-12 18:30:31
【问题描述】:

假设我有一个大文件,我想使用 PHP 和 curl 将 HTTP POST 发送到 Web 服务。该文件大于我可以让 PHP 使用的内存量。

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

我成功使用了多部分 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);

【问题讨论】:

  • 在这种情况下,您可能最好使用自定义 fsockopen 块。它只需要一个 POST 标头 blob,以及一个用于 fread/fwrite 的简单循环。
  • 你有什么理由不能只 SCP 文件? PECL 有一个 ssh 库..

标签: php file curl upload stream


【解决方案1】:

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

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

【讨论】:

  • 看起来很有希望,我会试一试。谢谢!
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 2016-02-22
  • 2017-10-25
相关资源
最近更新 更多