ホームページ  >  記事  >  バックエンド開発  >  PHP で「許可されたメモリ サイズが使い果たされました」エラーを適切にキャッチするにはどうすればよいですか?

PHP で「許可されたメモリ サイズが使い果たされました」エラーを適切にキャッチするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 16:50:02445ブラウズ

How to Catch 'Allowed Memory Size Exhausted' Errors Gracefully in PHP?

PHP で「許可されたメモリ サイズを使い果たしました」エラーを適切にキャッチする

「許可されたメモリ サイズを使い果たしました」エラーなどの致命的なエラーを処理すると、これは、PHP アプリケーションの安定性と使いやすさを確保するために非常に重要です。 ini_set() を使用してメモリ制限を増やすことは迅速な解決策ですが、常に最良のオプションであるとは限りません。

致命的なエラーをより効果的に検出するには、 register_shutdown_function() の使用を検討してください。このメソッドを使用してコールバック関数を登録すると、スクリプト終了時に error_get_last() を使用してエラーをチェックできます。以下に例を示します。

<code class="php">ini_set('display_errors', false);
error_reporting(-1);

set_error_handler(function($code, $string, $file, $line) {
    throw new ErrorException($string, null, $code, $file, $line);
});

register_shutdown_function(function() {
    $error = error_get_last();
    if (null !== $error) {
        echo 'Caught at shutdown';
    }
});

try {
    while (true) {
        $data .= str_repeat('#', PHP_INT_MAX);
    }
} catch (\Exception $exception) {
    echo 'Caught in try/catch';
}</code>

このコードを実行すると、「シャットダウン時にキャッチされました」という出力が表示されます。これは、「許可されたメモリ サイズが使い果たされました」などの致命的なエラーによってスクリプトが終了し、シャットダウン関数がエラーをキャッチするためです。 error.

シャットダウン関数内の $error 配列内のエラーの詳細にアクセスし、それに応じて応答を調整できます。たとえば、リクエストを別の URL にリダイレクトしたり、別のパラメータを使用してリクエストの処理を試みたりできます。

register_shutdown_function() によるエラー処理は致命的なエラーを検出するのに効果的ですが、error_reporting() を高く設定することをお勧めします。 (-1) し、他のすべてのエラーには set_error_handler() と ErrorException によるエラー処理を使用します。

以上がPHP で「許可されたメモリ サイズが使い果たされました」エラーを適切にキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。