PHPエラー『Fatal Error: Maximum Execution Time Exceeded』の解決方法

  • 作成日 2025.07.16
  • php
PHPエラー『Fatal Error: Maximum Execution Time Exceeded』の解決方法

PHPアプリケーションで『Fatal Error: Maximum Execution Time Exceeded』というエラーが発生した場合の対処法を詳しく説明します。このエラーは、スクリプトの実行時間が設定された最大実行時間を超えた場合に発生します。長時間かかる処理や無限ループが主な原因です。具体的な解決策をステップバイステップで紹介します。

エラーの発生条件

このエラーは、スクリプトの実行時間が設定された最大実行時間を超えた場合に発生します。例えば、長時間かかる処理や無限ループが原因で、スクリプトが終了せずに実行され続ける場合などが考えられます。

最大実行時間を確認する

まず、現在の最大実行時間を確認します。以下のコマンドで最大実行時間を確認します。

php -i | grep max_execution_time

このコマンドを実行すると、現在の最大実行時間が表示されます。デフォルトでは30秒に設定されていることが多いです。

最大実行時間を延長する

最大実行時間を延長することで、エラーを回避できます。以下のようにphp.iniファイルで最大実行時間を設定します。

max_execution_time = 60

ここで、最大実行時間を60秒に設定します。必要に応じてさらに延長することも可能です。

スクリプト内で最大実行時間を設定する

スクリプト内で最大実行時間を設定することもできます。以下のようにset_time_limit関数を使用します。

set_time_limit(60);

このコードをスクリプトの先頭に追加すると、最大実行時間が60秒に設定されます。

長時間かかる処理を最適化する

長時間かかる処理を最適化することで、実行時間を短縮できます。例えば、以下のようにループ処理を最適化します。

for ($i = 0; $i < 1000000; $i++) {
    // 何らかの処理
}

ここで、ループ処理が効率的に行われているか確認します。

無限ループを防ぐ

無限ループが発生しないように注意します。例えば、以下のようにループの終了条件を確認します。

$i = 0;
while (true) {
    if ($i > 1000000) {
        break;
    }
    // 何らかの処理
    $i++;
}

ここで、ループの終了条件が正しく設定されているか確認します。

バッチ処理に分割する

長時間かかる処理をバッチ処理に分割することで、実行時間を短縮できます。例えば、以下のように処理を分割します。

$total = 1000000;
$batchSize = 10000;

for ($i = 0; $i < $total; $i += $batchSize) {
    for ($j = $i; $j < $i + $batchSize; $j++) {
        // 何らかの処理
    }
}

ここで、処理が適切に分割されているか確認します。

非同期処理を使用する

非同期処理を使用することで、長時間かかる処理をバックグラウンドで実行できます。例えば、以下のように非同期処理を使用します。

exec('php long_running_script.php > /dev/null 2>&1 &');

このコードを追加すると、長時間かかる処理がバックグラウンドで実行されます。

メモリ使用量を確認する

メモリ使用量が多すぎる場合、実行時間が長くなることがあります。以下のコマンドでメモリ使用量を確認します。

php -i | grep memory_limit

このコマンドを実行すると、現在のメモリ制限が表示されます。必要に応じてメモリ制限を増やします。

エラーログを確認する

エラーログを確認することで、エラーの原因を特定できる場合があります。以下のコマンドでエラーログを確認します。

tail -f /var/log/php_errors.log

このコマンドを実行すると、PHPのエラーログをリアルタイムで確認できます。

デバッグ情報を追加する

デバッグ情報を追加することで、エラーの原因を特定しやすくなります。例えば、以下のようにデバッグ情報を追加します。

$startTime = microtime(true);

// 何らかの処理

$endTime = microtime(true);
$executionTime = $endTime - $startTime;

if ($executionTime > 30) {
    die('Execution time exceeded 30 seconds');
}

このコードを追加すると、実行時間が30秒を超えた場合にエラーメッセージが表示されます。

まとめ

『Fatal Error: Maximum Execution Time Exceeded』というエラーは、スクリプトの実行時間が設定された最大実行時間を超えた場合に発生します。最大実行時間の延長、長時間かかる処理の最適化、無限ループの防止、バッチ処理の分割など、ステップバイステップで問題を解決していくことが重要です。