Home >Backend Development >PHP Tutorial >fgets慢,有没有其它办法

fgets慢,有没有其它办法

WBOY
WBOYOriginal
2016-06-23 14:14:211655browse

方法:

$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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn