Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】opcache_get_status()関数の使い方

opcache_get_status関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

opcache_get_status関数は、OPcacheのステータス情報を取得する関数です。OPcacheは、PHPスクリプトをコンパイルした結果をメモリにキャッシュすることで、PHPのパフォーマンスを向上させるための拡張モジュールです。この関数を使用すると、OPcacheが有効になっているか、メモリの使用状況、キャッシュされたスクリプトの情報など、OPcacheに関する様々な情報を取得できます。

具体的には、opcache_get_status()関数を呼び出すと、連想配列形式でOPcacheの状態が返されます。この配列には、OPcacheが有効かどうかを示すフラグ、使用されているメモリ量、空きメモリ量、キャッシュされているスクリプトの数、ヒット率、ミス率などが含まれます。これらの情報に基づいて、OPcacheの設定を調整したり、パフォーマンスの問題を特定したりすることができます。

例えば、キャッシュのヒット率が低い場合は、opcache.revalidate_freqopcache.validate_timestampsといった設定を見直すことで、キャッシュの有効性を高めることが可能です。また、メモリ使用量が多い場合は、opcache.memory_consumptionを調整することを検討できます。

この関数は、OPcacheが有効になっている場合にのみ利用可能です。OPcacheが無効になっている場合は、falseを返します。システムエンジニアがPHPアプリケーションのパフォーマンスを監視し、最適化する上で非常に重要な関数と言えるでしょう。

構文(syntax)

1opcache_get_status(bool $include_script = true): array|false

引数(parameters)

bool $include_scripts = true

  • bool $include_scripts = true: スクリプトごとの詳細情報を含めるかどうかを指定する真偽値。true の場合、キャッシュされているスクリプトに関する情報も取得します。デフォルトは true です。

戻り値(return)

array|false

OPcache の実行時ステータス情報が連想配列で返されます。opcache が有効でない場合やエラーが発生した場合は false が返されます。

サンプルコード

PHP OPcache ステータスを取得する

1<?php
2
3/**
4 * OPcacheの現在のステータス情報を取得し、表示するサンプルコード。
5 *
6 * システムエンジニアを目指す初心者向けに、PHPのOPcacheがどのように動作しているかを確認する方法を示します。
7 * OPcacheはPHPスクリプトの実行速度を向上させるための拡張機能です。
8 */
9function displayOpcacheStatus(): void
10{
11    echo "OPcacheステータス取得を試行します。\n\n";
12
13    // opcache_get_status() を呼び出し、OPcacheの現在のステータス情報を取得します。
14    // 引数に true を指定することで、キャッシュされているスクリプトの情報も結果に含まれます。
15    $status = opcache_get_status(true);
16
17    if ($status === false) {
18        // OPcacheが有効でない場合。
19        // 通常、php.iniで 'opcache.enable=1' が設定されていないか、
20        // CLI環境の場合は 'opcache.enable_cli=1' が設定されていない可能性があります。
21        echo "エラー: OPcacheは無効になっています。\n";
22        echo "php.ini の設定を確認してください。\n";
23    } else {
24        // OPcacheが有効な場合、取得したステータス情報を表示します。
25        echo "OPcacheステータス情報:\n";
26        echo "--------------------------\n";
27
28        // var_dump を使用して、取得した全ての情報を詳細に表示します。
29        // この情報から、OPcacheが有効かどうか ('opcache_enabled')、
30        // メモリの使用状況 ('memory_usage')、キャッシュのヒット率 ('opcache_statistics')、
31        // そしてキャッシュされているスクリプトの詳細 ('scripts' - $include_scripts=trueの場合)
32        // などを確認できます。
33        var_dump($status);
34
35        echo "\nOPcacheが有効であれば 'opcache_enabled' の値が true になります。\n";
36        echo "'memory_usage' セクションでメモリの使用状況を、\n";
37        echo "'opcache_statistics' セクションでキャッシュの利用状況を確認できます。\n";
38        echo "特にウェブサーバー環境でパフォーマンスチューニングを行う際に有用な情報です。\n";
39    }
40}
41
42// 関数を実行して、OPcacheのステータスを表示します。
43displayOpcacheStatus();
44
45?>

PHPのopcache_get_status関数は、ウェブサーバーなどでPHPスクリプトの実行を高速化する「OPcache」拡張機能の現在の動作状況を取得するための関数です。このサンプルコードは、OPcacheが正しく機能しているか、またはどのような状態にあるかを確認する方法を初心者向けに示しています。

opcache_get_status()関数を呼び出す際、引数にtrueを指定することで、現在キャッシュされている個々のスクリプト情報も詳細な結果として含めることができます。この関数は、OPcacheが有効な場合はそのステータス情報や統計データを格納した連想配列を返します。もしOPcacheが無効な設定になっている場合は、戻り値としてfalseを返します。

サンプルコードでは、戻り値がfalseの場合にはOPcacheが無効である旨のエラーメッセージを表示し、php.iniの設定を確認するよう案内しています。一方、正常にステータス情報が取得できた場合は、var_dumpを使ってその内容を詳細に表示します。取得された情報には、OPcacheが有効かどうかを示すopcache_enabled、メモリの使用状況を示すmemory_usage、キャッシュの利用状況を示すopcache_statisticsなどが含まれており、これらの情報からOPcacheの効率的な運用状況を把握し、パフォーマンス改善に役立てることができます。

opcache_get_status()関数は、PHPのOPcacheの動作状況を取得します。この関数がfalseを返す場合、多くはPHPの設定ファイル(php.ini)でOPcacheが無効になっているためです。コマンドライン実行時にはopcache.enable_cli=1、ウェブサーバー環境ではopcache.enable=1の設定を確認してください。引数trueは、キャッシュされているスクリプトの詳細情報を含めることを意味し、情報量が増えます。取得されるステータス情報は、メモリ使用量やキャッシュのヒット率など、PHPアプリケーションのパフォーマンスチューニングに非常に有用です。しかし、本番環境でこの情報を安易に外部に表示することは、セキュリティ上のリスクとなるため注意が必要です。

OPcacheステータス情報の取得と表示

1<?php
2
3/**
4 * OPcacheのステータス情報を取得し、表示します。
5 * システムエンジニアを目指す初心者が、OPcacheの状態を把握する基本的な方法として役立ちます。
6 */
7function displayOpcacheStatus(): void
8{
9    // opcache_get_status関数は、PHPのOPcacheの現在の状態に関する情報を取得します。
10    // 引数 `$include_scripts` を省略すると、デフォルトで true となり、
11    // キャッシュされている個々のスクリプトの情報も含まれますが、
12    // ここでは全体的な概要を分かりやすく表示するため、主要な情報に絞ります。
13    // OPcacheが無効な場合(php.iniで 'opcache.enable=0' など)、この関数は false を返します。
14    $status = opcache_get_status();
15
16    if ($status === false) {
17        echo "OPcacheは無効になっているか、利用できません。\n";
18        echo "php.iniで 'opcache.enable=1' が設定されているか確認してください。\n";
19        return;
20    }
21
22    echo "--- OPcache 全体ステータス ---\n";
23    echo "OPcache 有効: " . ($status['opcache_enabled'] ? 'はい' : 'いいえ') . "\n";
24    echo "キャッシュ満杯: " . ($status['cache_full'] ? 'はい' : 'いいえ') . "\n";
25    echo "リスタート保留中: " . ($status['restart_pending'] ? 'はい' : 'いいえ') . "\n";
26    echo "\n";
27
28    echo "--- メモリ使用量 ---\n";
29    $memoryUsage = $status['memory_usage'];
30    echo "使用済みメモリ: " . round($memoryUsage['used_memory'] / (1024 * 1024), 2) . " MB\n";
31    echo "空きメモリ: " . round($memoryUsage['free_memory'] / (1024 * 1024), 2) . " MB\n";
32    echo "最大メモリ: " . round($memoryUsage['total_memory'] / (1024 * 1024), 2) . " MB\n";
33    // 'current_wasted_percentage' は PHP 8.0以降で追加されたキーです。
34    // 存在しない可能性を考慮して null合体演算子 (??) を使用しています。
35    echo "現在の無駄な割合: " . round($memoryUsage['current_wasted_percentage'] ?? 0, 2) . "%\n"; 
36    echo "\n";
37
38    echo "--- OPcache 統計 ---\n";
39    $statistics = $status['opcache_statistics'];
40    echo "ヒット数: " . $statistics['hits'] . "\n";
41    echo "ミス数: " . $statistics['misses'] . "\n";
42    echo "キャッシュヒット率: " . round($statistics['opcache_hit_rate'], 2) . "%\n";
43    echo "キャッシュされたスクリプト数: " . $statistics['num_cached_scripts'] . "\n";
44    echo "OPcache開始時刻: " . date('Y-m-d H:i:s', $statistics['start_time']) . "\n";
45    // 'last_restart_time' が 0 の場合はリスタートがまだ行われていないことを示します。
46    echo "最終リスタート時刻: " . ($statistics['last_restart_time'] > 0 ? date('Y-m-d H:i:s', $statistics['last_restart_time']) : 'なし') . "\n";
47    echo "\n";
48
49    // インターン文字列の利用状況 (PHP 7.4以降で追加されたキー)
50    if (isset($status['interned_strings_usage'])) {
51        echo "--- インターン文字列利用状況 ---\n";
52        $internedStringsUsage = $status['interned_strings_usage'];
53        echo "使用済みメモリ: " . round($internedStringsUsage['used_memory'] / (1024 * 1024), 2) . " MB\n";
54        echo "空きメモリ: " . round($internedStringsUsage['free_memory'] / (1024 * 1024), 2) . " MB\n";
55        echo "最大メモリ: " . round($internedStringsUsage['buffer_size'] / (1024 * 1024), 2) . " MB\n";
56        echo "\n";
57    }
58}
59
60// 上で定義した関数を呼び出して、OPcacheのステータス情報を表示します。
61displayOpcacheStatus();
62

PHPのopcache_get_status関数は、Webサーバー上で動作するPHPアプリケーションのパフォーマンスを向上させるOPcacheの現在の状態を取得するために利用されます。この関数は、OPcacheが有効な場合に、その詳細なステータス情報を格納した連想配列を返します。もしOPcacheが無効になっている場合は、falseを返しますので、サンプルコードではまずこの戻り値を確認し、OPcacheが有効かどうかを判断しています。

引数$include_scriptsは、キャッシュされている個々のスクリプトに関する情報を含めるかどうかを決定します。デフォルトではtrueが設定されており、個々のスクリプトの情報も含まれますが、今回のサンプルコードでは全体的な概要を分かりやすく表示するため、主なステータス情報に焦点を当てています。

返されるステータス情報には、OPcacheが現在有効であるかどうかの状態、メモリの使用状況(使用済み、空き、最大メモリ)、キャッシュのヒット数やミス数、キャッシュされたスクリプトの総数、OPcacheの開始時刻などの重要なデータが含まれます。これらの情報は、PHPアプリケーションの動作状況を把握し、システム全体のパフォーマンスを監視したり、問題発生時に原因を特定したりするために非常に役立ちます。このサンプルコードは、これらの重要な情報を取得し、初心者にも理解しやすい形式で表示することで、OPcacheの基本的な状態確認をサポートします。

opcache_get_status()は、OPcacheが無効な場合にfalseを返すため、必ず有効性のチェックを行ってください。この関数はphp.iniでopcache.enable=1が設定されている場合のみ動作します。戻り値の配列には、PHPのバージョンによって存在しないキーがあるため、isset()やnull合体演算子(??)で確認すると安全です。メモリ使用量はバイト単位で返されるため、表示する際にはメガバイトへの変換が必要です。引数$include_scriptstrueにすると、個々のスクリプト情報も含まれて情報量が増えるため、用途に応じて調整を検討してください。

関連コンテンツ

関連IT用語