ホームページ  >  記事  >  バックエンド開発  >  fgets が遅いのですが、何か方法はありますか?

fgets が遅いのですが、何か方法はありますか?

WBOY
WBOYオリジナル
2016-06-23 14:14:211627ブラウズ

方法:

$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);


この方法でもデータは取得できますが、遅すぎて20秒以上かかります。

他にデータを読み取る方法はありますか? fread を使用しないでください。fread では完全なデータを取得できません。


ディスカッションへの返信 (解決策)

curl についてはどうですか?

遅いのはネットワーク接続が原因です。ハードウェア環境が変更されない限り、コードを変更しても問題は解決しません。

ネットワーク接続が遅いのは、ハードウェア環境が変更されない限り問題ありません。コードをどのように変更しても役に立ちません

情報を見ましたが、fread と fget の原理がよくわかりません。
fread はすべてのデータを一度に非常に高速に読み取りますが、完全なデータを取得することはできず、取得できるのは 1,000 バイト以上です。
fgets には毎回 1024 個かかりますが、すべてを取得することもできます。しかし、それは非常に遅いです。

fgets は毎回再リンクする必要があるので、ループが 10 回を超えると、そのたびに重ね合わせが遅くなりますか?

fgets と fread は接続に直接関与しません。データ パケットは到着後、ローカル バッファを読み取るため、バッファに格納されるため、速度には影響しません。

fread は、指定されたサイズのデータ​​ ブロックをファイルの終わりまで読み取ります。ファイルの終端が判断できない場合は待ちが発生し、失敗の原因となります。
fgets は、指定されたサイズのデータ​​ ブロックを読み取り、ファイルの終わりまで改行文字に遭遇すると読み取りを停止します

リモート データを取得するには、一般的に file_get_contents を使用します

ファイル全体が 8k を超えない場合は、その方が良いです

1024を入れる 試しに外して見てください

理由が分かりました。

サーバー上の MTU パッケージは制限されています。

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

🎜 🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。