fgets慢,有没有其它办法

WBOY
发布: 2016-06-23 14:14:21
原创
1626 人浏览过

方法:

$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = '';while(!feof($fp)) {   $result.= fgets($fp,1024);}print_r($result);
登录后复制


这样虽然能取到数据,可太慢了,得二十多秒。

有其它方法能读到数据吗?不要用fread,用fread取不到完整数据。


回复讨论(解决方案)

curl呢?

慢是因为网络连接,除非改变硬件环境,怎么改代码都无济于事

慢是因为网络连接,除非改变硬件环境,怎么改代码都无济于事

我看了一下资料,不太懂fread,fgets它们的原理。
fread一次性读取所有数据非常快,只是取不到完整的数据,只能取一千多字节。
while fgets每次取1024的话,就能全部取到。可就非常慢了。

是不是每次fgets都是要重新去链接一次,所以循环如果有十几次每次时间叠加就会慢下来?

fgets, fread都是不直接参与连接的。数据包到达后会存放在缓冲区,他们读的是本机的缓冲区,所以不会影响速度。

fread 读取指定大小的数据块,直到文件结束。如果无法判定文件结束,则会出现等待而导致失败。
fgets 读取指定大小的数据块,会在遇到换行符是停止读取,直到文件结束

获取远程数据,一般用 file_get_contents 就可以了

如果你整个文件不大于8k的,不如把1024去掉试试看

找到原因了。

服务器上面MTU包做了限制。

http://blog.csdn.net/jjjfew/article/details/6413460

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板