2

私はソケットに不慣れで、ソケットがサーバーからデータをフェッチしている間に、ユーザーに待機するように指示するデータを表示しようとしていますが、ob_flush、flush、およびその他の関数も使用しましたが、機能しませんでした。テキスト「読み込み中....お待ちください」は、ソケットが閉じられた後にのみ表示されます。これが私のコードです

$fp = fsockopen("tcp:.......", port num, $errno, $errstr);
if (!$fp) 
{
    echo "ERROR: $errno - $errstr<br />\n";
} 
else 
{
    echo "Loading .... Please Wait";
    flush();
    fwrite($fp, $num . "\n");
    ini_set('max_execution_time', 600);
    $cmd_res = fread($fp, 1000);
    echo $cmd_res;
    fclose($fp);
}

解決策があれば、助けてください。前もって感謝します

4

2 に答える 2

0

それを機能させるためのいくつかのアドバイス:

  1. php.ini で出力バッファリングがオフになっていることを確認します。

    output_buffering = Off
    zlib.output_compression = Off
    
  2. アクティブな出力バッファリング バッファがアクティブな場合:

    while(ob_get_level()){ 
        ob_end_clean(); 
    }
    
  3. 応答をバッファリングできる http サーバーモジュールを無効にします (例: Apache の mod_gzip)。

  4. ブラウザーが応答をバッファリングしていないことを確認します (Chrome が応答の終了を待機している間、FireFox は応答を直接出力しているようです)
  5. 他のブラウザでは、表示する前により多くのデータを受信する必要がある場合があります。いくつかのスペースを使用してください。

    echo str_repeat(" ",1024)."\n";
    
于 2012-09-26T22:57:48.337 に答える
0

fwrite 行の末尾にキャリッジ リターンを追加してみてください。

fwrite($fp, $num . "\r\n");

ソケットはこの組み合わせで改行を想定しています。

于 2012-09-26T16:22:12.763 に答える