PHP获取curl传输进度
2017-07-19 12:37
381 查看
curl上传或者下载,有以下2个选项:
CURLOPT_NOPROGRESS:是否关闭传输进度,默认是true。
CURLOPT_PROGRESSFUNCTION:回调函数,curl传输过程中,会每隔一段时间自动调用该函数。我测试过,间隔不到1秒,具体不知道。官方的注释是这样:设置一个回调函数,有五个参数,第一个是cURL的资源句柄,第二个是预计要下载的总字节(bytes)数。第三个是目前下载的字节数,第四个是预计传输中总上传字节数,第五个是目前上传的字节数。
(注意回调函数的命名空间。如:CURLOPT_PROGRESSFUNCTION => ‘namespace_xxx\callback’)
设置完成后,需要定义回调函数:
重要:
在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累加的,如果攻略是对的,那么这个不用管。
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获取302跳转后的地址实例
- 通过PHP的Curl函数模拟Post获取内容
- PHP获取Cookie模拟登录CURL
- PHP - Manual手册 - XVIII. CURL, Client URL Library Functions客户端URL库函数 - curl_setopt设置cURL传输的选项
- php-curl获取接口图片地址,在php拼接img中无法访问,报403错误,在浏览器url中直接可以访问,html页面里img也可以访问
- php 中curl获取用户文件的大小
- PHP中巧用curl 并发减少获取第三方网页内容时间
- php curl xml传输和转换
- PHP通过CURL模拟登录并获取数据
- php获取数据为什么curl获取不完整
- php利用curl获取网页title内容
- php使用curl通过代理获取数据的实现方法
- 浅谈PHP中的数据传输CURL
- php利用curl获取远程图片实现方法
- PHP使用CURL函数获取HTTPS网页及POST数据示例
- php获取远程图片的两种:CURL方式和sockets方式获取远程图片
- 微信Curl获取信息简单案例(PHP版)
- php使用curl获取https请求的方法
- 浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
- https php使用curl获取https请求的方法