PHP 用 curl 读取 HTTP chunked 数据
浏览:1327次 出处信息
对于 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天十大热文
- [17] [译]Google Chrome中的高性能网
- [17] 在FreeNAS/BSD搭建基于Nginx+
- [16] 关于Linux的文件系统cache
- [16] 最近总结的一些技巧(vim,python,s
- [15] Linux常用系统信息查看命令
- [12] Linux(Ubuntu 10.04)上安装
- [10] Buffer和cache的区别是什么?
- [10] Centos yum 安装nginx+PHP
- [10] PHP加速器 eaccelerator 缓存
- [9] base64_encode 和 urlenc