Eine saubere und reaktionsfähige Schnittstelle für Zend OPcache-Informationen, die Statistiken, Einstellungen und zwischengespeicherte Dateien anzeigt und eine Aktualisierung der Informationen in Echtzeit bereitstellt.
Diese Schnittstelle verwendet ReactJS und Axios und ist für moderne Browser geeignet und erfordert mindestens PHP 7.1.
MIT: http://acollington.mit-license.org/
Wenn Sie in der Lage sind und diese Arbeit auf irgendeine Weise sponsern möchten, dann wäre das super toll. Sie können dies über die GitHub-Sponsorship-Seite tun.
Wenn Sie mir alternativ einfach auf X (auch bekannt als Twitter) mitteilen möchten, dass Sie es verwenden, dann wäre das auch großartig! (Vermisst sonst noch jemand Postkartenartikel?)
Es gibt zwei Möglichkeiten, mit der Verwendung dieser GUI zu beginnen:
Der einfachste Weg, die opcache-gui zu verwenden, besteht darin, dieses Repo zu klonen oder einfach die Datei index.php
an einen Speicherort zu kopieren/einzufügen/herunterzuladen, den Ihr Webserver laden kann. Richten Sie dann Ihren Browser auf diesen Speicherort, z. B. https://www.example.com/opcache/index.php
.
Sie können die Dateien mit Composer einbinden, indem Sie den Befehl composer require amnuts/opcache-gui
ausführen.
Sobald Sie sich in Ihrem vendor
befinden, gibt es zahlreiche Möglichkeiten, die Schnittstelle zu nutzen. Wenn Sie beispielsweise ein Framework wie Symfony oder Laravel verwenden, können Sie opcache-gui in einen Controller
laden. Ihre Anforderungen an die Einrichtung innerhalb des Rahmenwerks Ihrer Wahl variieren, daher ist es nicht wirklich möglich, in dieser Readme-Datei detailliert darauf einzugehen, wie das geht ... aber ich vertraue darauf, dass Sie es herausfinden können!
Der für die Klasse verwendete Namespace ist AmnutsOpcache
. Sobald sich die Abhängigkeit also in Ihrer autoload.php
befindet, können Sie die Klasse AmnutsOpcacheService
verwenden. Sie könnten beispielsweise Folgendes tun:
<?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 ();
Anschließend können Sie eine beliebige Ansicht erstellen, in der die Opcache-Details angezeigt werden. Obwohl Ihnen in diesem Repo eine ziemlich nette React-basierte Schnittstelle zur Verfügung steht.
Alternativ können Sie vendor/amnuts/opcache-gui/index.php
direkt einbinden. Dadurch erhalten Sie das gleiche Ergebnis, als würden Sie einfach die index.php
irgendwo kopieren/einfügen.
<?php
// assuming location of: /var/www/html/opcache.php
require_once __DIR__ . ' /../vendor/amnuts/opcache-gui/index.php ' ;
Sie könnten sogar einfach einen Symlink zur index.php
erstellen, die sich im vendor
befindet:
ln -s /var/www/vendor/amnuts/opcache-gui/index.php /var/www/html/opcache.php
Grundsätzlich gibt es viele Möglichkeiten, die Schnittstelle zum Laufen zu bringen – wählen Sie diejenige aus, die Ihren Anforderungen entspricht.
Die Standardkonfiguration für die Schnittstelle sieht folgendermaßen aus:
$ 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
];
Wenn Sie eine der Standardeinstellungen ändern möchten, können Sie nur diejenigen übergeben, die Sie ändern möchten, wenn Sie den Rest gerne so belassen möchten, wie er ist. Ändern Sie einfach das Array oben im index.php
-Skript (oder übergeben Sie das Array anders als die Service
-Klasse).
Folgendes würde beispielsweise nur die Werte allow_reset
und refresh_time
ändern, alles andere jedoch als Standard beibehalten:
$ opcache = ( new Service ([
' refresh_time ' => 2 ,
' allow_reset ' => false
]))-> handle ();
Oder dieses Beispiel, um den Tabs ein etwas „piraterieartigeres“ Gefühl zu verleihen:
$ 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 ();
Die Übersicht zeigt Ihnen alle Kerninformationen. Von hier aus können Sie sehen, auf welchem Host und auf welcher Plattform Sie laufen, welche Version von OPcache Sie verwenden, wann es das letzte Mal zurückgesetzt wurde, welche Funktionen und Anweisungen verfügbar sind (mit Links zum php.net-Handbuch), und alle mit dem OPcache verbundenen Statistiken (Anzahl der Treffer, verwendeter Speicher, freier und verschwendeter Speicher und mehr).
Hier werden alle aktuell im Cache befindlichen Dateien mit den dazugehörigen Statistiken aufgelistet.
Sie können die Ergebnisse filtern, um die gesuchten Skripte leichter zu finden, und die Art und Weise ändern, wie zwischengespeicherte Dateien sortiert werden. Von hier aus können Sie den Cache für einzelne Dateien oder für alle Dateien, die Ihrer Suche entsprechen, ungültig machen.
Wenn Sie die Dateiliste überhaupt nicht anzeigen möchten, können Sie die Konfigurationsoption allow_filelist
verwenden. Wenn Sie den Wert auf false
setzen, wird die Dateiliste vollständig unterdrückt.
Wenn Sie die Paginierungslänge anpassen möchten, können Sie dies mit der Konfigurationsoption per_page
tun.
Wenn Sie eine Liste von Dateien eingerichtet haben, die nicht zwischengespeichert werden sollen, indem Sie einen opcache.blacklist_filename
-Wert angeben, wird die Liste der Dateien auf dieser Registerkarte aufgelistet.
Wenn Sie diese Konfigurationsoption nicht in der Datei php.ini
angegeben haben, wird diese Registerkarte nicht angezeigt. Wenn Sie die Konfigurationsoption allow_filelist
auf false
setzen, wird diese Registerkarte unabhängig von Ihrer INI-Einstellung nicht angezeigt.
Mit PHP 7.4 wurde die Möglichkeit eingeführt, beim Serverstart über die Einstellung opcache.preload
in Ihrer php.ini
Datei eine Reihe von Dateien vorab zu laden. Wenn Sie dies eingerichtet haben, wird auf dieser Registerkarte die Liste der speziell vorinstallierten Dateien aufgeführt.
Wie bei der ignorierten Datei wird diese Registerkarte nicht angezeigt, wenn Sie die INI-Einstellung nicht angegeben haben oder die Konfigurationsoption allow_filelist
auf false
gesetzt ist.
Sie können den gesamten Cache zurücksetzen und einzelne Dateien oder Dateigruppen erzwingen, dass sie ungültig werden, sodass sie erneut zwischengespeichert werden.
Das Zurücksetzen kann mithilfe der Konfigurationsoptionen allow_reset
und allow_invalidate
deaktiviert werden.
Die Schnittstelle kann von Zeit zu Zeit Abfragen durchführen, um einen neuen Blick auf den Opcache zu werfen. Mit der Konfigurationsoption „ refresh_time
“ können Sie ändern, wie oft dies geschieht (in Sekunden).
Wenn die Echtzeitaktualisierungen aktiv sind, aktualisiert die Schnittstelle automatisch alle Werte nach Bedarf.
Wenn Sie sich außerdem dafür entscheiden, Dateien ungültig zu machen oder den Cache zurückzusetzen, geschieht dies, ohne dass die Seite neu geladen wird, sodass der von Ihnen eingegebene Suchbegriff oder die Seite, zu der Sie navigiert haben, nicht zurückgesetzt wird. Wenn die Echtzeitaktualisierung nicht aktiviert ist, wird die Seite bei jeder Invalidierungsnutzung neu geladen.
Die Benutzeroberfläche wurde nach dem Prinzip entwickelt, nur eine Datei zu haben, die jeder benötigt, um loszulegen. Um dies zu erreichen, gibt es eine Vorlagendatei, Sprachdateien, jsx und css, die alle zum Erstellen der Schnittstelle verwendet werden und im Build-Prozess zusammengeführt werden.
Dieser Build-Prozess ermöglicht es Ihnen, die verwendete Sprache, die Einbindung der erforderlichen Javascript-Bibliotheken von Drittanbietern, das Erscheinungsbild oder sogar die Kernkomponenten zu ändern, falls Sie dies wünschen.
Um den Build-Prozess auszuführen, führen Sie den Befehl php ./build/build.php
im Repo-Root aus (Sie müssen nodejs
und npm
bereits installiert haben). Nach der Ausführung sollte die Ausgabe etwa so aussehen:
Installing node modules
Building js and css
Creating single build file
Using remote js links from 'cloudflare'
Done!
Das Build-Skript muss die node_modules
nur einmal installieren, daher sollte es bei nachfolgenden Builds etwas schneller gehen!
Der Build-Prozess erstellt eine kompilierte CSS-Datei unter build/interface.css
und das Javascript der Schnittstelle befindet sich in build/interface.js
. Sie könnten wahrscheinlich beides in Ihren eigenen Frameworks und Vorlagensystemen verwenden, wenn Sie dies wünschen.
Das CSS für die Schnittstelle befindet sich in der Datei build/_frontend/interface.scss
. Nehmen Sie dort Änderungen vor, wenn Sie die Farben oder Formatierungen ändern möchten.
Wenn Sie Änderungen an der SCSS-Datei vornehmen, müssen Sie das Build-Skript ausführen, um die Änderungen zu sehen.
Wenn Sie die Schnittstelle selbst ändern möchten, aktualisieren Sie die Datei build/_frontend/interface.jsx
– es handelt sich im Grunde genommen um eine Reihe von ReactJS-Komponenten. Hier können Sie das Widget-Layout, die Funktionsweise der Dateiliste, die Paginierung usw. ändern.
Führen Sie das Build-Skript erneut aus, falls Sie hier Änderungen vornehmen.
Die Wrapper-PHP-Vorlage, die im Build-Prozess verwendet wird und verschiedene Datenbits an die ReactJS-Seite weiterleitet, befindet sich unter build/template.phps
. Wenn Sie die verwendete Version von ReactJS oder die Struktur des Wrapper-HTML aktualisieren möchten (z. B. wenn Sie zusätzliche Dinge an die ReactJS-Seite übergeben möchten), ist dies die Datei, die Sie aktualisieren möchten.
Für die ordnungsgemäße Funktion der Schnittstelle sind einige JS-Dateien von Drittanbietern erforderlich. Sie haben die Möglichkeit zu ändern, wo diese abgerufen werden (zwischen CloudFare, JSDelivr und Unpkg), oder Sie können js js vollständig lokal und inline verwenden (z. B. haben Sie CSP-Richtlinien vorhanden und die Remote-URLs sind vorhanden). nicht auf der Whitelist).
Um den Speicherort der Ressourcen von Drittanbietern zu ändern, verwenden Sie die Option -r
oder --remote-js
gefolgt von cloudflare
, jsdelivr
oder unpkg
. Wenn Sie beispielsweise jsdelivr verwenden möchten, führen Sie den Build-Befehl wie folgt aus: php ./build/build.php -r jsdelivr
. Dies ist standardmäßig cloudflare
.
Wenn Sie die js inline haben möchten, können Sie beim Erstellen das Flag -j
oder --local-js
verwenden, z. B. php ./build/build.php -j
. Dadurch werden die Remote-Skriptdateien abgerufen und die js in die Hauptdatei index.php
eingebettet. Wenn Sie es erneut mit Remote-Dateien erstellen möchten, führen Sie den Befehl erneut ohne das Flag aus. Beim Abrufen der Dateien wird Ihre Option -r
berücksichtigt, sofern Sie diese angeben.
Es gibt ein altes Sprichwort, das besagt: „Wer mehr als eine Sprache beherrscht, ist mehrsprachig, wenn nicht, ist man Brite.“ Das ist nicht nur eine vernichtende Anklage gegen die britische Mentalität gegenüber anderen Sprachen, sondern erklärt auch, warum die Benutzeroberfläche bisher nur auf Englisch war – weil ich trotz all meiner Sünden Brite bin.
Allerdings ist es jetzt möglich, die Schnittstelle mit einer anderen Sprache zu erstellen. Derzeit werden dank Mitwirkenden auch Französisch und Spanisch unterstützt. Wenn jemand anderes zusätzliche Sprachpakete beisteuern möchte, reichen Sie bitte eine PR ein!
Wenn sich das Sprachpaket im Verzeichnis build/_languages/
befindet, können Sie es mit dem Flag -l
oder --lang
verwenden. Wenn es beispielsweise ein fr.json
-Sprachpaket gibt, können Sie php ./build/build.php -l fr
verwenden, um mit dieser Sprache zu erstellen.
Es wurden einige Composer-Skripte hinzugefügt, um beim Bau zu helfen. Es sind composer build
, composer build-french
und composer build-spanish
.
Wenn Sie eine Sprachdatei erstellen möchten, enthält build/_languages/example.json
alles, was Sie brauchen. Es handelt sich um eine einfache JSON-Struktur, wobei der Schlüssel die englische Version ist, die mit dem übereinstimmt, was in der Benutzeroberfläche angezeigt wird, und der Wert der Wert ist, in den Sie ihn konvertieren – der in der Beispieldatei einfach leer ist. Wenn ein Wert leer ist oder der Index für eine Übersetzung nicht vorhanden ist, wird einfach die englische Version verwendet. Dies gibt Ihnen die Möglichkeit, einige oder alle Schnittstellenzeichenfolgen nach Bedarf zu ersetzen.
Um mit einer neuen Sprache zu beginnen, kopieren Sie example.json
in die gewünschte Sprache, die noch nicht vorhanden ist – zum Beispiel pt-br.json
oder pirate.json
. Tragen Sie dann die Übersetzungen in die Werte ein. Sobald Sie fertig sind, erstellen Sie es mit php ./build/build.php -l pt-br
oder php ./build/build.php -l pirate
neu.
Version 3.5.5
Spanische Übersetzungen hinzugefügt dank @cvc90 (PR#110)
Version 3.5.4
Bessere Handhabung, ob JIT aktiviert oder deaktiviert ist. Zeigt jetzt auch an , warum es möglicherweise deaktiviert ist, selbst wenn Sie die Einstellung aktiviert haben. Die Schnittstelle deaktiviert auch die Diagramm- und Speicherstatistiken korrekt für JIT, wenn sie aus irgendeinem Grund deaktiviert sind.
Version 3.5.3
Einige Inkonsistenzen mit Links in der Opcache-Dokumentation auf php.net wurden umgangen.
Version 3.5.2
Einige Warnungen für PHP 8.2 wurden entfernt, indem die namespace
und use
-Anweisungen in der gebündelten index.php
Datei entfernt wurden.
Version 3.5.1
Dies ist nur 3.5.0, aber mit korrigierten Versions-Tags, um Packagist glücklich zu machen und meinen Fehler zu korrigieren.
Version 3.5.0
Diese Version ändert die Art und Weise, wie der Build-Prozess das Javascript einbezieht.
-j
/ --local-js
bettet das Javascript jetzt in die Datei index.php
ein, anstatt sie als separate Dateien bereitzustellen-r
/ --remote-js
wurde hinzugefügt, damit Sie entscheiden können, woher Sie die Dateien von Drittanbietern beziehen (entweder beim lokalen Abruf oder beim Hinzufügen als Remote-Skript-Links), wobei cloudflare
, jsdelivr
oder unpkg
verfügbar sind Optionen Version 3.4.0
Diese Version fügt etwas mehr Informationen zu den Dateien im Cache hinzu und ermöglicht etwas mehr Konfiguration über das Konfigurations- und Build-Skript.
datetime_format
für flexible Formatierung von Datums-/Uhrzeitwerten hinzugefügtmodified
/-uhrzeit der zwischengespeicherten Datei zur Ausgabe hinzugefügt (wann die Datei entweder hinzugefügt oder aktualisiert wurde)index.php
mit den lokalen js-Dateien statt mit Remote-URLs erstellen Version 3.3.1
Nur ein paar kleine Änderungen:
Version 3.3.0
Meistens hinzugefügte JIT-Informationen für PHP 8:
false
warWenn Sie JIT aktivieren möchten, müssen Sie einen Wert für die INI-Einstellung opcache.jit_buffer_size eingeben, andernfalls ist es standardmäßig deaktiviert.
Wenn Sie PHP 8 nicht verwenden, kompensiert die Schnittstelle dies und zeigt die zusätzlichen JIT-Informationen nicht an.
Version 3.2.1
Kleinere Wartungsversion für:
Version 3.2.0
ReactJS wurde auf die neuesten und verwendeten minimierten Versionen aktualisiert und die Sortieroption, wenn keine Paginierung vorhanden ist, leicht verbessert.
Version 3.1.0
Es wurde die Möglichkeit hinzugefügt, die zwischengespeicherte Dateiliste auf verschiedene Arten zu sortieren.
Version 3.0.1
Ein kleines Update, das http oder https verwendet, um die Javascript-Bibliotheken abzurufen, je nachdem, was Sie verwenden.
Version 3.0.0
Obwohl die Benutzeroberfläche größtenteils gleich aussieht, wurde sie unter der Haube komplett neu geschrieben! Einige der bemerkenswerteren Änderungen sind:
Version 2.5.4
Die Platzierung des anfänglichen CSS-Namespace wurde verfeinert, damit er gut mit dem Moodle-Plugin und möglicherweise anderen Systemen funktioniert. Außerdem wurde einiges an CSS optimiert.
Version 2.5.3
Zur Verwendung wurden CSS-Klassennamen hinzugefügt und Stilregeln aktualisiert.
Version 2.5.2
Hotfix für die optimierungslevel-Werte, der in v2.5.1 veröffentlicht wurde.
Version 2.5.1
Ein paar Fehlerbehebungen und Verbesserungen der Optimierungsstufendetails.
Version 2.5.0
Es wurde ein neues Hervorhebungsdiagramm hinzugefügt, um den Prozentsatz der zwischengespeicherten Schlüssel anzuzeigen, mit Optionen zum Ein-/Ausschalten der einzelnen Hervorhebungsdiagramme.
Version 2.4.1
Hauptsächlich Fehlerbehebungen
memory_consumption
und max_file_size
werden jetzt als für Menschen lesbare Größen angezeigtfile_cache_only
aktiv ist Version 2.4.0
Fügt einen Cookie-Speicher für den Echtzeitstatus hinzu, sodass die Echtzeit beim Laden aktiviert werden kann. Cookie-Name und TTL-Länge können in der Konfiguration angepasst werden
Version 2.3.0
Fügt Informationen zu internen Strings und PHP 5.4-Kompatibilität hinzu
Version 2.2.2
Bringt Optimierungen für die Dateiliste beim Filtern mit
Version 2.2.1
Die Messgeräte werden jetzt mit dem Echtzeitimpuls aktualisiert und einige Rundungsprobleme wurden behoben
Version 2.2.0
Bietet die Möglichkeit, die Dateiliste ein-/auszuschalten (Standardeinstellung ist „Ein“).
Version 2.1.0
Bietet jetzt eine viel einfachere Möglichkeit, einige Optionen zu konfigurieren, sei es die Abfragezeit, das Umschalten der Möglichkeit zum Zurücksetzen des Caches, Echtzeitaktualisierungen usw. Außerdem können Sie die großen Werte (Speichernutzung und Trefferquote) als Anzeige anzeigen Grafiken statt großer Zahlen.
Version 2.0.0
Führt die Verwendung von React.js ein und bietet die Möglichkeit, mehr Informationen nahtlos in Echtzeit zu aktualisieren (standardmäßig alle fünf Sekunden) – sodass jetzt sowohl die Dateien als auch die Übersicht aktualisiert werden. Es gibt einen aktualisierten Look, bei dem die Farbverläufe entfernt wurden und ein flacheres Gefühl entsteht. Und der Code im Allgemeinen wurde überarbeitet.
Versionen der GUI sind verfügbar unter:
https://github.com/amnuts/opcache-gui/releases/
Eine Reihe von Leuten hat gefragt, ob die Opcache-GUI auf ihrer PHP-FPM-Instanz funktioniert, da die angezeigten Dateien nicht alles zu sein scheinen, was zwischengespeichert ist, und das unterscheidet sich von dem, was Apache möglicherweise anzeigt.
Im Wesentlichen handelt es sich hierbei um erwartetes Verhalten. Und dank eines großartigen Kommentars von Mitwirkendem Michalng sollte diese Erklärung den Unterschied abdecken:
Die Schnittstelle kann nur anzeigen, was sie über die OPcache-Nutzung ihrer eigenen OPcache-Instanz weiß. Wenn also über Apache mit mod_php darauf zugegriffen wird, kann sie nur die OPcache-Nutzung dieser OPcache-Instanz des Apache-Webservers sehen. Wenn mit klassischem CGI darauf zugegriffen wird, kann es nur dann zwischengespeichert werden, wenn eine neue PHP- und OPcache-Instanz erstellt wird. In diesem Fall macht OPcache selbst oft keinen Sinn.
Um den OPcache für alle Webanwendungen überwachen und verwalten zu können, müssen alle dasselbe FastCGI, also eine PHP-FPM-Instanz, verwenden.
Im Fall von Apache muss man es dann oft aktiv konfigurieren, um nicht sein internes mod_php zu verwenden, sondern PHP-Handler-Anfragen über mod_proxy_fcgi an den gemeinsam genutzten PHP-FPM-Server zu senden, was auch die Verwendung des Ereignis-MPM erfordert. Heutzutage wird dies allgemein als die bevorzugte Konfiguration angesehen, insbesondere für Websites mit hohem Datenverkehr. Dies liegt daran, dass jede einzelne eingehende Anfrage mit MPM prefork + mod_php einen eigenen untergeordneten Prozess erstellt, der zusätzliche Zeit und Speicher beansprucht, während mit Event-MPM und dediziertem PHP-FPM-Server ein (normalerweise) bereits wartender Handler-Thread auf Apache- und PHP-Seite verwendet wird. Es verbraucht nahezu keinen zusätzlichen Speicher oder Zeit für die Prozesserstellung.
Das Skript erfordert PHP 7.1 oder höher. Ich bin nicht versucht, den Code herunterzustufen, um ihn mit Version 7.0 kompatibel zu machen, und ich hoffe, dass die meisten Leute inzwischen ein Upgrade durchgeführt haben. Aber ich weiß es wirklich zu schätzen, dass Menschen manchmal einfach nicht die Möglichkeit haben, die von ihnen verwendete PHP-Version zu ändern, weil sie außerhalb ihrer Kontrolle liegen. Wenn Sie also zu den Pechvögeln gehören, können Sie die folgenden Änderungen an index.php
(oder Service.php
) vornehmen und das Build-Skript ausführen. Für die Zeilen:
public function getOption(?string $name = null)
public function getData(?string $section = null, ?string $property = null)
public function resetCache(?string $file = null): bool
Es geht nur darum, das ?
zu entfernen. von jedem der Parameter.