0

次のコードをすべて完全にテストすると、php で sleep() 関数を長時間使用すると問題が発生します。

<?php

set_time_limit(0);

$i = 0;

while($i < 10) {

    echo $i.'<br />';

    if($i == 5){        
        echo 'sleeping 5 secs<br />';
        sleep(5);   
        echo 'waking up<br />';
    }

    $i++;
}

?>

*****OUTPUT****

0
1
2
3
4
5
sleeping 5 secs
waking up
6
7
8
9

*****OUTPUT****

5秒間スリープし、その後「目覚め」が問題なくエコーされますが、スクリプトがスリープしている秒数を上げると、15分と言って出力は次のようになります。

*****OUTPUT****

0
1
2
3
4
5
sleeping 900 secs //(15 mins)

*****OUTPUT****

スクリプトは 15 分間のスリープ後に強制終了されたようです!! 何が原因でしょうか? set_time_limit(0); で max_execution_time フラグを無限に設定したことに注意してください。スクリプトの上部にあります。

私はどんな助けにも感謝します、ありがとう!

4

2 に答える 2

1

Webサーバー(Apache、IISなど)にもタイムアウト設定があります。多くのサーバーがデフォルトで300秒であることを確認してください)。

さらに、set_time_limitに注意してください。マニュアルから:'PHPがセーフモードで実行されている場合、この関数は効果がありません。セーフモードをオフにするか、php.iniの制限時間を変更する以外に回避策はありません。

于 2013-02-18T16:11:15.227 に答える
1

PHPマニュアルから:

set_time_limit()が呼び出されると、タイムアウトカウンターがゼロから再開されます。つまり、タイムアウトがデフォルトの30秒で、スクリプト実行の25秒後にset_time_limit(20)などの呼び出しが行われる場合、スクリプトはタイムアウトする前に合計45秒間実行されます。

試してみてください:

set_time_limit(900);

set_time_limit(0);WebサーバーがHTTPタイムアウト(通常は約5分)を課す可能性があるため、これを行うことはお勧めしません。

于 2013-02-18T16:12:13.977 に答える