Zend OPcache 情報のクリーンで応答性の高いインターフェイス。統計、設定、キャッシュされたファイルを表示し、情報のリアルタイム更新を提供します。
このインターフェイスは ReactJS と Axios を使用しており、最新のブラウザー向けであり、少なくとも PHP 7.1 が必要です。
MIT: http://acollington.mit-license.org/
もしあなたが何らかの形でこの作品のスポンサーになりたいと思っているなら、それはとても素晴らしいことです。これは、GitHub スポンサーシップ ページから行うことができます。
あるいは、X (別名 Twitter) で私にこの機能を使用していることを知らせていただければ、それも素晴らしいことです。 (ポストカードを見逃している人はいますか?)
この GUI の使用を開始するには 2 つの方法があります。
opcache-gui の使用を開始する最も簡単な方法は、このリポジトリのクローンを作成するか、Web サーバーがロードできる場所にindex.php
ファイルをコピー/貼り付け/ダウンロードすることです。次に、ブラウザーでその場所 ( https://www.example.com/opcache/index.php
など) を指定します。
コマンドcomposer require amnuts/opcache-gui
実行することで、Composer にファイルを含めることができます。
vendor
ディレクトリにアクセスすると、インターフェイスをさまざまな方法で使用できます。たとえば、Symfony や Laravel などのフレームワークを使用している場合は、 opcache-gui をController
にロードできます。選択したフレームワーク内で設定するための要件はさまざまなので、この Readme 内でその設定方法を詳しく説明することはできません...しかし、私はあなたの理解力を信じています。
このクラスに使用される名前空間はAmnutsOpcache
なので、依存関係がautoload.php
に含まれると、 AmnutsOpcacheService
クラスを使用できるようになります。たとえば、次のようなことができます。
<?php
use Amnuts Opcache Service ;
// assuming location of: /var/www/html/opcache.php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
// specify any options you want different from the defaults, if any
$ options = [ /* ... */ ];
// setup the class and pass in your options, if you have any
$ opcache = ( new Service ( $ options ))-> handle ();
その後、opcache の詳細を表示するために必要なビューを作成できます。ただし、このリポジトリには非常に優れた React ベースのインターフェイスが用意されています。
あるいは、 vendor/amnuts/opcache-gui/index.php
直接インクルードすると、 index.php
どこかにコピー/ペーストするのと同じ結果が得られます。
<?php
// assuming location of: /var/www/html/opcache.php
require_once __DIR__ . ' /../vendor/amnuts/opcache-gui/index.php ' ;
単純に、 vendor
ディレクトリにあるindex.php
へのシンボリックリンクを作成することもできます。
ln -s /var/www/vendor/amnuts/opcache-gui/index.php /var/www/html/opcache.php
基本的に、インターフェースを稼働させる方法はたくさんあります。ニーズに合ったものを選んでください。
インターフェイスのデフォルト設定は次のようになります。
$ options = [
' allow_filelist ' => true , // show/hide the files tab
' allow_invalidate ' => true , // give a link to invalidate files
' allow_reset ' => true , // give option to reset the whole cache
' allow_realtime ' => true , // give option to enable/disable real-time updates
' refresh_time ' => 5 , // how often the data will refresh, in seconds
' size_precision ' => 2 , // Digits after decimal point
' size_space ' => false , // have '1MB' or '1 MB' when showing sizes
' charts ' => true , // show gauge chart or just big numbers
' debounce_rate ' => 250 , // milliseconds after key press to send keyup event when filtering
' per_page ' => 200 , // How many results per page to show in the file list, false for no pagination
' cookie_name ' => ' opcachegui ' , // name of cookie
' cookie_ttl ' => 365 , // days to store cookie
' datetime_format ' => ' D, d M Y H:i:s O ' , // Show datetime in this format
' highlight ' => [
' memory ' => true , // show the memory chart/big number
' hits ' => true , // show the hit rate chart/big number
' keys ' => true , // show the keys used chart/big number
' jit ' => true // show the jit buffer chart/big number
],
// json structure of all text strings used, or null for default
' language_pack ' => null
];
デフォルトのいずれかを変更したい場合は、残りをそのままにしておいて問題なければ、変更したいものだけを渡すことができます。 index.php
スクリプトの先頭にある配列を変更するだけです (または、別の方法で配列をService
クラスに渡します)。
たとえば、次の場合は、 allow_reset
値とrefresh_time
値のみを変更し、その他はすべてデフォルトのままにします。
$ opcache = ( new Service ([
' refresh_time ' => 2 ,
' allow_reset ' => false
]))-> handle ();
または、タブにもう少し「海賊版」の雰囲気を与えるには、次の例を使用します。
$ opcache = ( new Service ([
' language_pack ' => <<<EOJSON
{
"Overview": "Crows nest",
"Cached": "Thar Booty",
"Ignored": "The Black Spot",
"Preloaded": "Ready an' waitin', Cap'n",
"Reset cache": "Be gone, yer scurvy dogs!",
"Enable real-time update": "Keep a weathered eye",
"Disable real-time update": "Avert yer eyes, sea dog!"
}
EOJSON
]))-> handle ();
概要にはすべての重要な情報が表示されます。ここから、実行しているホストとプラットフォーム、使用している OPcache のバージョン、最後にリセットされたとき、利用可能な関数とディレクティブ (php.net マニュアルへのリンク付き) を確認できます。 OPcache に関連するすべての統計 (ヒット数、使用されたメモリ、空きメモリと無駄なメモリなど)。
現在キャッシュ内にあるすべてのファイルが、関連する統計とともにここにリストされます。
結果をフィルタリングして、探している特定のスクリプトを見つけたり、キャッシュされたファイルの並べ替え方法を変更したりできます。ここから、個々のファイルのキャッシュを無効にすることも、検索に一致するすべてのファイルのキャッシュを無効にすることもできます。
ファイルリストをまったく表示したくない場合は、 allow_filelist
構成オプションを使用できます。 false
に設定すると、ファイル リストが完全に抑制されます。
ページネーションの長さを調整したい場合は、 per_page
設定オプションを使用して調整できます。
opcache.blacklist_filename
値を指定してキャッシュしたくないファイルのリストを設定した場合、ファイルのリストがこのタブ内にリストされます。
php.ini
ファイルでその構成オプションを指定していない場合、このタブは表示されません。 allow_filelist
構成オプションをfalse
に設定すると、ini 設定に関係なく、このタブは表示されません。
PHP 7.4 では、 php.ini
ファイルのopcache.preload
設定を使用して、サーバーの起動時に一連のファイルをプリロードする機能が導入されました。それを設定している場合は、特にプリロードされたファイルのリストがこのタブ内に表示されます。
無視されたファイルの場合と同様、ini 設定を指定していない場合、またはallow_filelist
構成オプションがfalse
場合、このタブは表示されません。
キャッシュ全体をリセットしたり、個々のファイルまたはファイルのグループを強制的に無効にして再度キャッシュすることができます。
リセットは、構成オプションallow_reset
およびallow_invalidate
を使用して無効にできます。
インターフェイスは、opcache を最新の状態で確認するために頻繁にポーリングできます。これが行われる頻度は、構成オプションのrefresh_time
(秒単位) で変更できます。
リアルタイム更新がアクティブな場合、インターフェイスは必要に応じてすべての値を自動的に更新します。
また、ファイルを無効にするかキャッシュをリセットすることを選択した場合、ページを再読み込みせずにこれが行われるため、入力した検索語や移動先のページはリセットされません。リアルタイム更新がオンになっていない場合、無効化の使用時にページがリロードされます。
このインターフェイスは、誰でも起動して実行するために必要なファイルが 1 つだけあるという原則に基づいて設計されています。これを実現するために、テンプレート ファイル、言語ファイル、jsx、css があり、これらはすべてインターフェイスの作成に使用され、ビルド プロセスでまとめられます。
このビルド プロセスでは、必要に応じて、使用する言語、必要なサードパーティの JavaScript ライブラリの組み込み方法、ルック アンド フィール、さらにはコア コンポーネントを変更できます。
ビルド プロセスを実行するには、リポジトリ ルートからコマンドphp ./build/build.php
を実行します ( nodejs
とnpm
すでにインストールされている必要があります)。実行すると、次のような出力が表示されるはずです。
Installing node modules
Building js and css
Creating single build file
Using remote js links from 'cloudflare'
Done!
ビルド スクリプトは、 node_modules
1 回インストールするだけで済むため、その後のビルドではかなり高速になるはずです。
ビルド プロセスでは、コンパイルされた CSS ファイルがbuild/interface.css
に作成され、インターフェイスの JavaScript はbuild/interface.js
に含まれます。必要に応じて、これらの両方を独自のフレームワークやテンプレート システム内で使用できるでしょう。
インターフェイスの CSS はbuild/_frontend/interface.scss
ファイルにあります。色や書式を変更したい場合は、そこで変更を加えます。
scss ファイルに変更を加えた場合は、変更を確認するためにビルド スクリプトを実行する必要があります。
インターフェイス自体を変更したい場合は、 build/_frontend/interface.jsx
ファイルを更新します。これは基本的に ReactJS コンポーネントのセットです。ここで、ウィジェットのレイアウト、ファイルリストの動作、ページネーションなどを変更できます。
ここで変更を加えた場合は、ビルド スクリプトを再度実行します。
ビルド プロセスで使用され、さまざまなデータを ReactJS 側に渡すように機能するラッパー PHP テンプレートは、 build/template.phps
にあります。使用する ReactJS のバージョン、またはラッパー HTML の構造を更新したい場合 (ReactJS 側に追加のものを渡したい場合など)、これが更新するファイルになります。
このインターフェイスが正しく機能するには、いくつかのサードパーティ製の js ファイルが必要です。これらをフェッチする場所 (CloudFare、JSDerivr、Unpkg の間) を変更できるようにするか、js js を完全にローカルでインラインにする (たとえば、CSP ポリシーを導入し、リモート URL をホワイトリストに登録されていません)。
サードパーティのリソースの場所を変更するには、 -r
または--remote-js
オプションを使用し、その後にcloudflare
、 jsdelivr
、またはunpkg
のいずれかを使用します。たとえば、 jsdelivr を使用したい場合は、次のようにビルド コマンドを実行します: php ./build/build.php -r jsdelivr
。これはデフォルトでcloudflare
になります。
js をインラインで使用したい場合は、ビルド時に-j
または--local-js
フラグを使用できます (例: php ./build/build.php -j
。これにより、リモート スクリプト ファイルがフェッチされ、js がメインのindex.php
ファイルに埋め込まれます。リモート ファイルを使用して再度ビルドする場合は、フラグを指定せずにコマンドを再度実行します。 -r
オプションを指定した場合、ファイルのフェッチではそれが考慮されます。
古いことわざに、「複数の言語を知っていれば多言語話者であり、そうでなければイギリス人である」というものがあります。これは他言語に対するイギリス人の精神性を非難するものであるだけでなく、なぜこれまで UI が英語しかなかったのかを説明することにもなります。なぜなら、私は罪を重ねてもイギリス人だからです。
ただし、別の言語を使用してインターフェイスを構築できるようになりました。現在、貢献者のおかげで、フランス語とスペイン語もサポートされています。他に追加の言語パックを提供したい人は、PR を送信してください。
言語パックがbuild/_languages/
ディレクトリにある場合は、それを-l
または--lang
フラグとともに使用できます。たとえば、 fr.json
言語パックがある場合、その言語でビルドするためにphp ./build/build.php -l fr
使用できます。
構築を支援するために、いくつかのコンポーザー スクリプトが追加されました。それらは、 composer build
、 composer build-french
、およびcomposer build-spanish
です。
言語ファイルを作成する場合は、 build/_languages/example.json
に必要なものがすべて含まれています。これは単純な JSON 構造で、キーは UI の内容と一致する英語バージョンで、値は変換先の値です (サンプル ファイルでは空白になっています)。値が空の場合、または翻訳のインデックスが存在しない場合は、英語バージョンのみが使用されます。これにより、インターフェイス文字列の一部またはすべてを必要に応じて置き換えることができます。
新しい言語の使用を開始するには、 example.json
、まだ存在しない希望の言語 (たとえば、 pt-br.json
やpirate.json
にコピーします。次に、値に翻訳を入力します。完了したら、 php ./build/build.php -l pt-br
またはphp ./build/build.php -l pirate
を使用して再構築します。
バージョン3.5.5
@cvc90 のおかげでスペイン語の翻訳を追加しました (PR#110)
バージョン 3.5.4
JIT が有効であるか無効であるかの処理が改善されました。設定がオンになっている場合でも無効になる可能性がある理由も示します。また、何らかの理由で JIT が無効になっている場合、インターフェイスはグラフとメモリの統計情報を JIT に対して正しく無効にします。
バージョン 3.5.3
php.net の opcache ドキュメント内のリンクに関するいくつかの不一致を回避しました。
バージョン 3.5.2
バンドルされているindex.php
ファイル内のnamespace
とuse
ステートメントを削除することで、PHP 8.2 のいくつかの警告を削除しました。
バージョン 3.5.1
これは単なる 3.5.0 ですが、Packagist を満足させ、私の間違いを正すためにバージョン タグが修正されています。
バージョン3.5.0
このバージョンでは、ビルド プロセスに JavaScript を含める方法が変更されます。
-j
/ --local-js
フラグは、JavaScript を別個のファイルとしてではなく、 index.php
ファイルに埋め込むようになりました。-r
/ --remote-js
オプションが追加され、サードパーティのファイルをどこから取得するかを決定できるようになりました (ローカルで取得するとき、またはリモート スクリプト リンクとして追加するときのいずれか)。 cloudflare
、 jsdelivr
、またはunpkg
が利用可能ですオプションバージョン 3.4.0
このバージョンでは、キャッシュ内のファイルに関する情報がもう少し追加され、構成スクリプトとビルド スクリプトを使用してさらに多くの構成が可能になります。
datetime_format
構成オプションを追加しましたmodified
日時を出力に追加しました (ファイルが追加または更新されたとき)index.php
ファイルを構築できるようになりました。バージョン 3.3.1
ほんの少しの微調整:
バージョン 3.3.0
PHP 8 の主な JIT 情報が追加されました。
false
の場合でも「すべて無効化」リンクが表示される、長い間未解決だったインターフェースのバグを修正しました。JIT を有効にしたい場合は、opcache.jit_buffer_size ini 設定の値を入力する必要があります。そうでない場合、デフォルトで無効になります。
PHP 8 を使用していない場合、インターフェイスは追加の JIT 情報を補正し、表示しません。
バージョン 3.2.1
マイナー メンテナンス リリース:
バージョン 3.2.0
ReactJS を最新のものに更新し、縮小バージョンを使用し、ページネーションが存在しない場合の並べ替えオプションをわずかに改善しました。
バージョン3.1.0
キャッシュされたファイルのリストをさまざまな方法で並べ替える機能が追加されました。
バージョン3.0.1
使用しているものに応じて、http または https を使用して JavaScript ライブラリを取得するマイナー アップデート。
バージョン3.0.0
インターフェースはほとんど同じに見えますが、内部は完全に書き直されています。より注目すべき変更点は次のとおりです。
バージョン2.5.4
Moodle プラグイン内および場合によっては他のシステム内で適切に動作するように、初期 CSS 名前空間の配置を洗練しました。 CSSも若干調整しました。
バージョン2.5.3
CSS クラス名が追加され、それらを使用するようにスタイル ルールが更新されました。
バージョン2.5.2
v2.5.1 で発行された optimisation_level 値のホットフィックス。
バージョン2.5.1
いくつかのバグ修正と最適化レベルの詳細の改善。
バージョン2.5.0
キャッシュされたキーの割合を表示する新しいハイライト グラフと、個々のハイライト グラフをオン/オフにするオプションが追加されました。
バージョン2.4.1
主にバグ修正
memory_consumption
およびmax_file_size
構成設定が人間が判読できるサイズで表示されるようになりましたfile_cache_only
がアクティブな場合の処理の改善バージョン2.4.0
リアルタイム状態の Cookie ストアを追加し、ロード時にリアルタイムをアクティブ化できるようにします。 Cookie名とTTLの長さは設定で調整できます
バージョン2.3.0
インターン化された文字列と PHP 5.4 の互換性に関する情報を追加
バージョン2.2.2
フィルタリング時にファイルリストを最適化します。
バージョン2.2.1
リアルタイムのパルスでゲージが更新され、いくつかの丸めの問題が修正されました
バージョン2.2.0
ファイルリストをオン/オフにする機能を提供します (デフォルトはオン)
バージョン2.1.0
ポーリング時間、キャッシュをリセットする機能の切り替え、リアルタイム更新など、いくつかのオプションをより簡単に設定する方法が提供されるようになりました。また、大きな値 (メモリ使用量とヒット率) をゲージとして表示することもできます。大きな数字の代わりにグラフを使用します。
バージョン2.0.0
React.js の使用により、より多くの情報をリアルタイム (デフォルトでは 5 秒ごと) でシームレスに更新できるようになり、ファイルと概要が更新されるようになりました。外観が更新され、グラデーションが削除され、よりフラットな雰囲気になりました。そして、コード全体が全面的に見直されました。
GUI のリリースは次から入手できます。
https://github.com/amnuts/opcache-gui/releases/
表示されるファイルがキャッシュされたものすべてではないようで、Apache が表示するものとは異なるため、opcache-gui が PHP-FPM のインスタンスで動作しているかどうかを疑問視する人が多くいます。
基本的に、それは予期された動作です。寄稿者 Michalng からの素晴らしいコメントのおかげで、この説明で違いがカバーされるはずです。
このインターフェイスは、独自の OPcache インスタンスの OPcache 使用法について知っていることのみを表示できるため、mod_php を使用して Apache 経由でアクセスした場合、その Apache Web サーバー OPcache インスタンスの OPcache 使用法のみを表示できます。従来の CGI でアクセスすると、新しい PHP と OPcache インスタンスが作成されるときにキャッシュされることしか認識できません。この場合、OPcache 自体は意味をなさないことがよくあります。
すべての Web アプリケーションの OPcache を監視および管理できるようにするには、すべてが同じ FastCGI、つまり PHP-FPM インスタンスを使用する必要があります。
Apache の場合、多くの場合、内部 mod_php を使用せずに、mod_proxy_fcgi 経由で共有 PHP-FPM サーバーに PHP ハンドラー リクエストを送信するようにアクティブに設定する必要があります。これには、イベント MPM の使用も必要です。現在、特にトラフィックの多い Web サイトでは、これが一般的に推奨される設定と見なされています。これは、MPM prefork + mod_php を使用した受信リクエストごとに独自の子プロセスが作成され、追加の時間とメモリが必要になるのに対し、イベント MPM と専用の PHP-FPM サーバーでは、(通常は) すでに待機しているハンドラー スレッドが Apache と PHP 側で使用されるためです。プロセスの生成に追加のメモリや時間をほとんど消費しません。
スクリプトには PHP 7.1 以降が必要です。私はバージョン 7.0 との互換性を持たせるためにコードをダウングレードする気はありません。願わくば、ほとんどの人がすでにアップグレードしていることを願っています。しかし、時々、自分が使用する PHP のバージョンを変更できないことがあるのは、自分では制御できないため、本当にありがたいことです。したがって、運が悪い人は、 index.php
(またはService.php
変更してビルド スクリプトを実行) に次の変更を加えることができます。行の場合:
public function getOption(?string $name = null)
public function getData(?string $section = null, ?string $property = null)
public function resetCache(?string $file = null): bool
?
を削除するだけのケースになります。各パラメータから。