PHP 用 curl 读取 HTTP chunked 数据
浏览:2060次 出处信息
对于 Web 服务器返回的 HTTP chunked 数据, 我们可能希望在每一个 chunk 返回时得到回调, 而不是所有的响应返回后再回调. 例如, 当服务器是 icomet 的时候.
在 PHP 中使用 curl 代码如下:
<?php $url = "http://127.0.0.1:8100/stream"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'myfunc'); $result = curl_exec($ch); curl_close($ch); function myfunc($ch, $data){ $bytes = strlen($data); // 处理 data return $bytes; }
但是, 这里有一个问题. 对于一个 chunk, 回调函数可能会被调用多次, 每一次大概是 16k 的数据. 这显然不是我们希望得到的. 因为 icomet 的一个 chunk 是以 "\n" 结尾, 所以回调函数可以做一下缓冲.
function myfunc($ch, $data){ $bytes = strlen($data); static $buf = ''; $buf .= $data; while(1){ $pos = strpos($buf, "\n"); if($pos === false){ break; } $data = substr($buf, 0, $pos+1); $buf = substr($buf, $pos+1); // 处理 data } }
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:iphp 框架增加 lazyload 特性
后一篇:php 去掉 头尾 空格 2种方法 >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: chunked
- 发布时间:2016-03-01 23:45:37
建议继续学习
近3天十大热文
- [290] 经常在各种框架之间切换使用是种什么体验?
- [224] PHP 用 curl 读取 HTTP chu
- [196] 关键词工具整理
- [189] 用 javascript 判断 IE 版本号
- [185] JavaScript 设置浏览器标题闪动
- [123] 为什么超长列表数据的翻页技术实现复杂(二)
- [93] 常用的mysql工具
- [92] 搜索引擎爬虫蜘蛛的USERAGENT收集
- [91] 通过php+imagick 创建PDF图片预
- [84] DOM中nodeName、nodeValue