PHP の set_time_limit 関数は、ページの実行時間を制限するために使用されます。たとえば、PHP ページの実行時間を 5 秒に定義したい場合は、set_time_limit(5) を実行するだけです。
PHP スクリプトは crontab を通じて 5 分ごとに実行されます。スクリプトの実行時間が 5 分を超えることを考慮して、set_time_limit(290) を使用してスクリプトが 290 秒で終了するように制御します。ある日、バックグラウンドで複数のプロセスがスクリプトを実行していることに突然気づきました。これは、set_time_limit(290) が機能しないことを意味します。それを証明するために、特別に次のコードテストを使用します。
コードは次のとおりです | コードをコピー |
set_time_limit(5); for ($i = 0; $i
echo date('Y-m-d H:i:s') . "n"; |
Web であっても CLI であっても、上記のスクリプトは 5 秒経っても終了しません。その後、ini_set(‘max_execution_time’, 5) テストが追加されましたが、結果は同じでした。ということは、set_time_limit関数はまったく役に立たないということでしょうか?実際、これは当てはまりません。根本的な原因は http://stackoverflow.com/questions/5874950/set-max-execution-time-in-php-cli にあります。たとえば、次のコードを使用します。
コードをコピー | |
set_time_limit(5); のため (;;) {
} |
に書いた公式ドキュメント (http://www.php.net/manual/en/function.set-time-limit.php) のこの関数の説明を見ていきます。
set_time_limit() 関数と構成ディレクティブ max_execution_time は、system() を使用したシステム コール、ストリーム操作、データベース クエリなど、スクリプトの実行以外で発生するアクティビティに費やされた時間のみに影響します。 . は、スクリプトが実行された最大時間を決定する際には含まれません。これは、測定時間が実際である Windows では当てはまりません。例
コードをコピー |
{ $sql="php (php) に挿入 値 ('$i')"; if ($conn->execute($sql)===flase) { //エコー "データ挿入エラー".$conn->errormsg(); } それ以外は { $phpid=$conn->ID の挿入(); echo $i."すでにデータベースに保存されています。番号: ".$phpid; } $i--; エコー " "; } ?> 注: スリープ機能の一時停止時間はスクリプトの実行時間には含まれません。それが最初のテストが失敗した理由です。 ページに大量のデータがある場合は、set_time_limit() を使用して実行時間を制御することをお勧めします。デフォルトは 30 秒であるため、set_time_limit(300) など、実行時間を長くする必要があります。秒は 0 に設定されており、継続的に実行されることを意味します。 例: set_time_limit(0) は、リンクが長時間実行されていることを意味します。 注: この関数を実行するには、php.ini でセーフモード = Off を設定し、セーフ モードをオフに設定する必要があります。そうしないと、次のエラーが発生します。 警告: set_time_limit() [function.set-time-limit]: セーフモードでは時間制限を設定できませんもう一度注意してください: php.ini で、次のように max_execution_time を定義することで、PHP ページの最大実行時間を設定できます:
設定値は900秒ですが、実際には PHPのset_time_limitの設定が機能しない場合の解決策: set_time_limit はスクリプトのタイムアウトを設定するために使用されます。使用方法は次のとおりです。set_time_limit(秒); これは、プログラムがこの文の実行時から指定された秒数以内に完了するまで実行されなければならないことを規定しています。 タイムアウトが発生すると、プログラムはエラーとなって終了します
ただし、set_time_limit を設定しても効果がない場合があります。set_time_limit 関数は Linux で実行するのが最適ですが、Windows で実行すると効果がない場合があります |