今日、スクレイピング プログラムを実行していると、PHP が長時間空白になり、次のエラー メッセージが表示されました:
致命的なエラー: ..... で最大実行時間 30 秒を超えました。
これは非常に簡単で、スクリプトの実行時間が上限の 30 秒を超えていることを意味します。このエラーは過去によく発生しており、通常はページのヘッダーに直接 set_time_limit(0) を追加することで対処していました。今日はこのエラーの対処方法をまとめます。関連情報を参照した後、このエラーに対処するには基本的に 3 つの方法があります。
(1) php 構成ファイル php.ini ファイルを変更して php.ini ファイルを見つけ、このファイル内で次の行を見つけます:
max_execution_time = 30 ;
行数値 30 を秒単位で希望の値に設定します。 (次のように直接変更することもできます: max_execution_time=0; // 制限なし) この変更を行った後はサーバーを再起動する必要があることに注意してください。
(2) ini_set() 関数を使用する php.ini を変更できない友人のために、ini_set() 関数を使用して最大実行時間制限値を変更し、その値をファイルの先頭に追加できます。次のコード:
ini_set('max_execution_time','100');
上記の設定は 100 秒ですが、0 に設定することもでき、その場合、実行時間は制限されません。
(3) set_time_limit() 関数を使用してプログラムの先頭に追加します。
set_time_limit(100);
は、最大実行時間が 100 秒に設定されていることを意味します。もちろん、上記と同じ意味でパラメータ Set を 0 に設定することもできます。 set_time_limit 関数の特別な説明: void set_time_limit (int $秒) この関数の機能は、スクリプトの実行に許可される時間を秒単位で設定することです。この設定を超えると、スクリプトは致命的なエラーを返します。デフォルト値は 30 秒、または php.ini の max_execution_time で定義された値 (この値が存在する場合) です。この関数が呼び出されると、set_time_limit() はタイムアウト カウンタを 0 から再スタートします。つまり、デフォルトのタイムアウトが 30 秒で、スクリプトが 25 秒間実行されているときに set_time_limit(20) が呼び出された場合、タイムアウトになるまでにスクリプトを実行できる合計時間は 45 秒になります。この機能は、php がセーフ モードで実行されている場合は有効になりません。セーフモードをオフにする(php.iniでsafe_modeをoffに設定する)か、php.iniで時間制限を変更する以外に方法はありません。
ケース: セーフ モードがオンになっていない場合は、プログラムの実行時間を 25 秒に設定します。例:
<p><?php</p>if(!ini_get('safe_mode')){<br /> set_time_limit(25);<br />}