>  기사  >  백엔드 개발  >  fgets慢,有没有其它办法

fgets慢,有没有其它办法

WBOY
WBOY원래의
2016-06-23 14:14:211626검색

方法:

$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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.