Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过流式传输文件,用PHP、curl和HTTPPOST上传文件?_Php_File_Curl_Upload_Stream - Fatal编程技术网

如何通过流式传输文件,用PHP、curl和HTTPPOST上传文件?

如何通过流式传输文件,用PHP、curl和HTTPPOST上传文件?,php,file,curl,upload,stream,Php,File,Curl,Upload,Stream,假设我有一个大文件,我想使用PHP和curl通过HTTP发布到Web服务。该文件大于我可以让PHP使用的内存量 基本上,我正在寻找一种方法,将文件内容直接流式传输到curl,而无需将整个文件读入内存 我成功地使用了多部分POST和PUT,但没有使用POST上传“二进制数据” 我想在PHP中实现的是此命令行的功能: $ curl -X POST -H "Content-Type: image/jpeg" \ --data-binary "@large.jpg" "http://ex

假设我有一个大文件,我想使用PHP和curl通过HTTP发布到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尝试了很多选项,例如infle、POSTFIELDS、Content-Type头,但没有成功

虽然它可以使用多部分,但我需要一个原始POST请求,没有多部分:

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

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

与此C示例中显示的逻辑几乎完全相同:

在这种情况下,您最好使用自定义fsockopen块。它只需要一个POST头blob和一个用于fread/fwrite的简单循环?PECL有一个ssh库..看起来很有前途,我将尝试一下。谢谢