PHP获取curl传输进度
来源:互联网 发布:网络信号避雷器 编辑:程序博客网 时间:2024/05/18 22:43
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累加的,如果攻略是对的,那么这个不用管。
- PHP获取curl传输进度
- PHP传输神器cURL
- php curl 跨域传输
- php怎么使用curl传输文件流
- PHP 获取文件上传进度
- PHP的CURL 获取邮箱地址
- php用curl获取sessionid
- PHP使用APC获取上传文件进度
- PHP通过APC获取上传文件进度
- PHP 通过curl库函数获取网页内容
- php curl登陆和获取内容类
- php curl通过代理获取数据
- php使用curl来获取远程图片
- PHP curl 获取响应的状态码
- PHP获取Cookie模拟登录CURL
- php跨服务器信息获取之cURL
- PHP+Curl伪造客户端获取页面
- CURL获取网页(PHP代码函数)
- hdu5826
- 安装.net framework 4.0失败,出现HRESULT 0xc8000222错误代码
- R语言之三种左连接
- Ehcache缓存框架入门级使用
- 堕落退散之日,奋斗开始之时!
- PHP获取curl传输进度
- 程序员,为什么写不好一份简历?
- JavaScript-回调函数
- 7月19号牛客网做题笔记
- 一个new失败问题的查找过程
- [PHP]链式调用
- scala入门06 集合的排序
- HDU 5769 Substring (后缀数组)
- hdu 1495 非常可乐