Rumah >pembangunan bahagian belakang >tutorial php >fgets慢,有没有其它办法

fgets慢,有没有其它办法

WBOY
WBOYasal
2016-06-23 14:14:211667semak imbas

方法:

$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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn