ホームページ >バックエンド開発 >PHPチュートリアル >小さなソケットの問題
fputs($fp_send, $send_all);
stream_set_timeout($fp_send, 30);
$result = fread($fp_send, 8192); このマシンで実行すると、完全な結果が得られます。
しかし、サーバーにアップロードした後、削除できたのは数百文字だけでした。
どうやって準備しますか?サーバー構成が必要ですか?
他に方法はありますか?
環境: LAMP
注: 非常に遅くなりますので、 while は使用しないでください。
ネットワークが遅すぎます
ネットワークが遅すぎるため、while を使用すると非常に遅いということですか?
ネットワーク要因とは別に、ファイルのすべての内容を一度に読み取る方法はありますか?
完全なファイルはわずか 4 キロバイトを超えます。
サーバーにアップロードした後、1,000 バイト以上しか読み取れませんでした。
このマシンは fread を使用してすべての文字を読み取ることができます。
注: ローカル クライアントは外部ネットワークとも通信します。
stream_set_timeout($fp_send, 30); があります
あなたの両側のプログラムに問題があると言ったら、あなたはずっと前に飛びついたかもしれません
ローカル テスト コード スニペット:
コード 1、fread を使用します:
$fp = fsockopen($server, $port, $errno, $errstr ,30);
fputs($fp, $send_all);
$result = fread($fp, $result);
コード 2、fgets を使用します:
$fp = fsockopen($server, $port, $errno, $errstr, 30);
fputs($fp, $send_all);
$ result = '';
while(!feof($fp)) {
$result.= fgets($fp,1024)
}
print_r($result); 注: $server は外部ネットワーク サーバーのアドレスです。
質問:
コード 1 結果は非常に高速です。コード 2 は非常に遅く、タイムアウトします。
コードに問題があるのでしょうか?
ネイティブ テスト コード スニペット:
コード 1、fread を使用:
$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = fread($fp, 5000);print_r($result);
$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);
注: $server は外部サーバーのアドレスです
質問:
コード 1 の結果すぐに、コード 2 は非常に遅く、タイムアウトになります。
コードに問題があるのでしょうか?
注: 取得されるデータの完全な量は 4000 バイトです。