关闭

PHP获取curl传输进度

328人阅读 评论(0) 收藏 举报
分类:

curl上传或者下载,有以下2个选项:

CURLOPT_NOPROGRESS => false,
CURLOPT_PROGRESSFUNCTION => 'callback',

CURLOPT_NOPROGRESS:是否关闭传输进度,默认是true。

CURLOPT_PROGRESSFUNCTION:回调函数,curl传输过程中,会每隔一段时间自动调用该函数。我测试过,间隔不到1秒,具体不知道。官方的注释是这样:设置一个回调函数,有五个参数,第一个是cURL的资源句柄,第二个是预计要下载的总字节(bytes)数。第三个是目前下载的字节数,第四个是预计传输中总上传字节数,第五个是目前上传的字节数。
(注意回调函数的命名空间。如:CURLOPT_PROGRESSFUNCTION => ‘namespace_xxx\callback’)

设置完成后,需要定义回调函数:

function callback($resource, $downloadSize = 0, $downloaded = 0, $uploadSize = 0, $uploaded = 0)
{
    // php5.5之前的参数是不同的,所以要考虑到兼容性
    if (version_compare(PHP_VERSION, '5.5.0') > 0) {
        $info = array(
            'downloadSize' => $downloadSize,
            'downloaded'   => $downloaded,
            'uploadSize'   => $uploadSize,
            'uploaded'     => $uploaded,
        );
    } else {
        $info = array(
            'downloadSize' => 0,
            'downloaded'   => 0,
            'uploadSize'   => $downloaded,
            'uploaded'     => $uploadSize,
        );
    }

    S('file_upload_' . session('user_auth.uid'), $info, 300); // 可以将结果存放到缓存(这里是ThinkPHP例子)
} 

重要:
在curl发起请求时,如果开启了session,会独占session,阻塞其他的请求。所以如果框架默认启用了session,在curl之前可以用session_write_close()函数关闭session阻塞。
参考:http://www.cnblogs.com/skillCoding/archive/2012/04/09/2439296.html

最后:在进行传输时,可以每隔1秒通过ajax来获取缓存信息,从而显示传输进度。

补充:
传送大文件时,php会超时,注意设置php-fpm.conf中的request_terminate_timeout值,我设了1000(秒)。
还有个max_children(进程数) ,进程不够用可改大。
在程序中,可以使用set_time_limit()临时增加php响应时间。
php.ini中还有max_execution_time设置,看攻略说是跟 set_time_limit累加的,如果攻略是对的,那么这个不用管。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

curl下载及上传命令使用整理

Linux curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、H...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2016-03-04 15:32
  • 6494

curl命令详解

对于windows用户如果用Cygwin模拟unix环境的话,里面没有带curl命令,要自己装,所以建议用Gow来模拟,它已经自带了curl工具,安装后直接在cmd环境中用curl命令就可,因为路径已...
  • testcs_dn
  • testcs_dn
  • 2015-02-26 07:31
  • 3195

curl命令详解

linux curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具。
  • foxman209
  • foxman209
  • 2011-03-25 16:03
  • 288353

libcurl--下载文件并实现进度条

昨天使用了windows api实现了下载文件以及显示下载进度:Windows客户端开发–URLDownloadToFile下载文件进度条今天就来说一使用libcurl实现http下载,并实现进度条。...
  • wangshubo1989
  • wangshubo1989
  • 2016-10-23 15:37
  • 8594

使用libcurl实现的下载器,取消下载

转载文章  http://blog.csdn.net/robertbaker/article/details/43703907 转载文章   http://blog.csdn.net/infoworl...
  • xiaojun111111
  • xiaojun111111
  • 2016-11-04 10:07
  • 1867

libcurl获取下载进度百分比,下载速度,剩余时间

如果希望获取下载或者上传进度相关信息,就给CURLOPT_NOPROGRESS属性设置0值 int ret = curl_easy_setopt(easy_handle, CURLOPT_URL, "...
  • ixiaochouyu
  • ixiaochouyu
  • 2015-08-05 18:32
  • 4689

libcurl下载文件并显示进度

  • 2014-10-22 14:23
  • 626KB
  • 下载

使用libcurl显示下载进度

(1)s_get_download_file_length函数获取目标文件大小。 (2)进度条处理函数CURLOPT_PROGRESSFUNCTION,注意设置的回调函数不要忘记了正常情况下ret...
  • zhouzhenhe2008
  • zhouzhenhe2008
  • 2016-12-25 23:24
  • 579

(二)使用libcurl实现获取目标文件大小, 下载进度显示, 断点续传等功能

本节jwisp为大家举例说明如果使用上节介绍的函数和参数,在使用libcurl的过程中,如何获取下载目标文件的大小 , 下载进度条,断点续传等,这些基本的函数,将为jwisp在最后处理下载过程异常...
  • javarat
  • javarat
  • 2012-09-20 22:53
  • 9825

curl命令结果不显示统计信息% Total % Received %

执行curl命令时,会返回这样的统计信息 如何关闭这个统计信息的显示? -----使用curl的-s 选项即可
  • qinyushuang
  • qinyushuang
  • 2015-03-07 10:52
  • 9794
    个人资料
    • 访问:5596次
    • 积分:232
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类