1

まず、私がやろうとしていることの基本的な考え方を説明したいと思います。

私は、無料の Web ホスティング サービスに何らかの仕事をさせようとしています。1 つの php ページと MySQL db を作成しました。私の PHP ページの背後にある基本的な考え方は、$shutdown の条件を持つ while ループと、コードが実行されているかどうかを追跡する while ループ内のいくつかのカウンターがあることです。

<?php

/*

Connect to database etc. etc

*/

$shutdown = false;
// Main loop
while (!$shutdown)
{
    // Check for user shutdown request
    $strq = "SELECT * FROM TB_Shutdown;";
    $result = mysql_query($strq);
    $row = mysql_fetch_array($result);
    if ($row[0] == "true")
    {
        $shutdown = true; // I know this statement is useless but nevermind
        break;
    }

    //Increase counter
    $strq = "SELECT * FROM TB_Counter;";
    $result = mysql_query($strq);
    $row = mysql_fetch_array($result);

    if (intval($row[0]) == 60)
    {
        // Reset counter
        $strq = "UPDATE TB_Counter SET value = 0";
        $result = mysql_query($strq);

            /*

        I have some code to do some works at here its not important just curl stuff

            */

    else
    {
        // Increase counter
        $strq = "UPDATE TB_Counter SET value = " . (intval($row[0]) + 1);
        $result = mysql_query($strq);
    }

        /*

    I have some code to do some works at here its not important just curl stuff

        */

    // Sleep
    sleep(1);
}

?>

そして、TB_Counter から値を返す check.php があります。

問題は、TB_Counter テーブルを毎秒追跡していることです。しばらくすると止まります。ウェブブラウザ (メイン while php ループ ページを呼び出す) を閉じると、約 2 分後に停止します。5〜7分経ってもブラウザに「接続がリセットされました」というエラーが表示され、ループが停止します。

ループが永遠に続くようにするにはどうすればよいですか?

4

3 に答える 3

1

PHP を完全に実行できるようにする必要があります。PHP.INIファイルには次のオプションがあります。

max_execution_time = 30;

これは、スクリプトがパーサーによって終了されるまでに実行できる最大時間を秒単位で設定します。これにより、不適切に作成されたスクリプトがサーバーを拘束するのを防ぐことができます。デフォルト設定は 30 です。コマンド ラインから PHP を実行する場合、デフォルト設定は 0 です。

機能set_time_limit:

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

PHP がセーフ モードで実行されているかどうかを確認するには、次のコマンドを使用できます。

echo $phpinfo['PHP Core']['safe_mode'][0]

巨大なプロセスになる場合は、Cron で CronJob として実行することを検討できます。それについての簡単な説明:

Cron は、あらかじめ決められた時間または間隔でコマンドを実行できるようにする非常に単純な Linux モジュールです。Windows では、スケジュールされたタスクと呼ばれます。Cron という名前は、実際には、時間の順序を意味する chronology という単語と同じ単語に由来しています。

Cron を使用すると、開発者は営業時間外に送信したほうがよい ezine のメール送信、統計の自動更新、動的ソースからの静的ページの再生成などのタスクを自動化できます。システム管理者や Web ホストは、クライアントでクォータ レポートを生成したり、自動クレジット カード請求を完了したり、または同様のタスクを実行したりする場合があります。Cron はみんなのために何かを持っています!

クロンについてもっと読む

于 2012-06-30T12:16:36.787 に答える
0

これをブラウザから処理しないでください。毎分cronを実行して、必要なチェックを行う方がより良い解決策になります。

次に、なぜ毎秒更新するのですか? タイムスタンプを書き留めるだけで、リクエストがいつ行われたかがわかりますか?

何かを永久に実行することはできません。さらに重要なことは、ビジネス プロセスが実行され続けることを保証することです。ビジネスケースをここに置くのが賢明かもしれません.秒を数えて1分以内に何かをする必要があるようですが、完全に明確ではありません. それで、あなたは何をする必要がありますか?

于 2012-06-30T12:19:29.100 に答える
0

PHP 関数 set_time_limit() を使用できます。

于 2012-06-30T12:16:17.217 に答える