6

数値の置換を実行するスクリプトを PHP 言語で作成する必要があります。しかし、PHP には実行時間の制限が 60 秒に設定されています。スクリプトを実行して、60 を超える sesunde を実行する必要がある場合、サーバーによって中断されないようにする方法を教えてください。PHPで最大実行時間制限を変更できることは知っていますが、スクリプトの実行時間を事前に知る必要のない別のバージョンを聞きたいです。

サーバーから頻繁にサインインおよびログアウトするよう友人に勧められましたが、その方法がわかりません。

どんなアドバイスでも大歓迎です。サンプルコードは役に立ちます。

ありがとう。

最初に数字を入力する必要があります。たとえば 25 です。この後、スクリプトが起動され、次の処理が必要になります。25 以下のすべての数字に対して、現在の段階で生成された数字を含むファイルが作成されます。次の番号については、以前に作成されたファイルを開き、開いたファイルの行に基づいて別のファイルを作成します。これには時間がかかるため、スクリプトがサーバーによって中断されるのを避ける必要があります。

4

4 に答える 4

2

@エマニュエル:

あなたの友人が「サーバーから頻繁にサインインおよびログアウトするよう友人に勧められましたが、これを行う方法がわかりません。」別々に作業して実行する」

たとえば、このスクリプトを 150 回実行すると、150 回実行できます。(因数分解) し、結果を表示します。

// スクリプト名: calc.php

<?php

 session_start();

 if(!isset($_SESSION['times'])){

    $_SESSION['times'] = 1;

    $_SESSION['result']  = 0;

 }elseif($_SESSION['times'] < 150){

    $_SESSION['times']++;

    $_SESSION['result'] = $_SESSION['result'] * $_SESSION['times'];

    header('Location: calc.php');

 }elseif($_SESSION['times'] == 150){

    echo "The Result is: " . $_SESSION['result'];

    die();

 }

?>

ところで (@Davmuz)、set_time_limit() 関数は Apache サーバーでのみ使用できます。Microsoft IIS サーバーでは有効な関数ではありません。

于 2010-01-27T15:20:50.157 に答える
0

set_time_limit(0) を使用しますが、safe_mode を無効にする必要があります: http://php.net/manual/en/function.set-time-limit.php 固定時間 (set_time_limit(300)) の使用をお勧めします。スクリプトの問題です (無限ループまたはメモリ リーク)。これは問題の原因にはなりません。

Apache などの Web サーバーにも最大 300 秒の時間制限があるため、変更する必要があります。Comet アプリケーションを実行する場合は、Apache よりも長い要求時間を持つことができる別の Web サーバーを選択した方がよい場合があります。

重いアルゴリズムのために長い実行時間が必要な場合は、並列処理を実装することもできます: http://www.google.com/#q=php+parallel+processing または、入力データとコンピューターを別の外部スクリプトで保存します。 cronまたはその他のもの。

于 2010-01-27T14:40:25.363 に答える
0

実行したい呼び出しをキューに入れてみることができます。これは、操作が完了したときにファイル (またはメモリ キャッシュ?) にシリアル化します。次に、CRON デーモンを使用してこのキューを 60 秒ごとに実行し、作業を継続してタスクを終了させることができます。

このアプローチの欠点は、キューへの追加やファイルのロックなどの問題であり、すぐに結果が必要な場合は面倒です。Dbに何かを追加している場合、うまくいくかもしれません。また、あまり効率的ではありません。

于 2010-01-27T14:38:29.777 に答える
0
set_time_limit(0)
于 2010-01-27T14:30:03.580 に答える