2

私はこのPHPコードを持っています:

<?php
    include_once("connect_to_mysql.php");

    $max=300;
    while($max--)
    {
        sleep(1);
        doMyThings();
    }
?>

mysql クエリを 1 秒間隔で 300 回繰り返すことになっています。しかし問題は、ブラウザーで 1 分ほど後に、次のメッセージが表示されることです: データが受信されませんでした。サーバーからデータが送信されなかったため、Web ページを読み込めません。

4

4 に答える 4

2

ブラウザは、クエリが完了するまで 5 分間も待機しません。

別の解決策を見つける必要があります。CLI で PHP スクリプトを実行することを検討してください。

于 2013-01-02T15:28:32.887 に答える
2

問題は次のとおりです。あなたのコードは少なくとも ( に必要な時間を考慮せずにdoMyThings()) 300 秒続くでしょう。ほとんどの PHP 環境では、デフォルトのスクリプト実行時間が約 60 秒に設定されており、スクリプトは停止し、何も出力されません。

次に (スクリプトの実行時間が長く設定されている場合は、スクリプトを長時間実行できるようにします)、スクリプトは終了するまで (つまり、約 300 秒) 実行する必要があり、その後、データが出力ストリームに書き込まれます。それまでは、出力は表示されません。

これら 2 つの問題を回避するには、次のコードを参照してください。

<?php
    // If allowed, unlimited script execution time
    set_time_limit(0);

    // End output buffering
    ob_end_flush(); 

    include_once("connect_to_mysql.php");

    $max=300;

    // End output buffering IE and Safari Workaround
    // They will only display the webpage if it's completely loaded or
    // at least 5000 bytes have been "printed".
    for($i=0;$i<5000;$i++)
    {
        echo ' ';
    }       

    while($max > 0)
    {
        sleep(1);
        doMyThings();
        $max--;

        // Manual output buffering
        ob_flush();
        flush();            
    }
?>

たぶん、この投稿もあなたに興味があるかもしれません:出力 exec() ping 結果を徐々に

于 2013-01-02T15:37:39.490 に答える
0

サーバー側で長時間の php コードを実行する場合、php.ini の max_execution_time ディレクティブを変更する必要があります。ただし、ブラウザは必要なだけ待機しないため、AJAX などの非同期テクノロジを使用する必要があります

于 2013-01-02T15:44:30.250 に答える
0

doMyThings(); を 300 回実行するとタイムアウトになるようです。あなたはで試すことができますset_time_limit(0);

スクリプトの実行を許可する秒数を設定します。これに達すると、スクリプトは致命的なエラーを返します。デフォルトの制限は 30 秒です。存在する場合は、php.ini で定義されている max_execution_time 値です。

于 2013-01-02T15:42:01.257 に答える