Чистый и отзывчивый интерфейс для информации Zend OPcache, показывающий статистику, настройки и кэшированные файлы, а также обеспечивающий обновление информации в режиме реального времени.
Этот интерфейс использует ReactJS и Axios, предназначен для современных браузеров и требует минимум PHP 7.1.
Массачусетский технологический институт: http://acollington.mit-license.org/
Если вы можете и хотели бы каким-то образом спонсировать эту работу, то это было бы супер здорово. Вы можете сделать это на странице спонсорства GitHub.
В качестве альтернативы, если вы просто хотите похвалить меня в X (он же Twitter), чтобы сказать, что вы его используете, это тоже было бы здорово! (Кто-нибудь еще скучает по открыткам?)
Есть два способа начать использовать этот графический интерфейс:
Самый простой способ начать использовать opcache-gui — клонировать этот репозиторий или просто скопировать/вставить/загрузить файл index.php
в место, которое может загрузить ваш веб-сервер. Затем укажите в браузере это место, например https://www.example.com/opcache/index.php
.
Вы можете включить файлы с помощью Composer, выполнив команду composer require amnuts/opcache-gui
.
Попав в каталог vendor
, вы сможете использовать интерфейс множеством способов. Например, если вы используете такую структуру, как Symfony или Laravel, вы можете загрузить opcache-gui в Controller
. Ваши требования к настройке в выбранной вами среде будут различаться, поэтому подробно описать, как это сделать, в этом файле ознакомительных сведений невозможно... но я верю в вашу способность разобраться в этом!
Пространство имен, используемое для класса, — 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 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 ' ;
Вы даже можете просто создать символическую ссылку на index.php
, который находится в каталоге vendor
:
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 появилась возможность предварительно загружать набор файлов при запуске сервера с помощью параметра opcache.preload
в файле php.ini
. Если вы это настроили, то на этой вкладке будет указан список специально загруженных файлов.
Как и в случае с игнорируемым файлом, если вы не указали параметр ini или параметр allow_filelist
имеет значение false
, эта вкладка не будет отображаться.
Вы можете сбросить весь кэш, а также принудительно сделать отдельные файлы или группы файлов недействительными, чтобы они снова были кэшированы.
Сброс можно отключить с помощью параметров allow_reset
allow_invalidate
.
Интерфейс может время от времени опрашивать, чтобы по-новому взглянуть на opcache. Вы можете изменить частоту этого события с помощью параметра refresh_time
, который указывается в секундах.
Когда обновления в реальном времени активны, интерфейс автоматически обновляет все значения по мере необходимости.
Кроме того, если вы решите сделать недействительными какие-либо файлы или сбросить кеш, это будет сделано без перезагрузки страницы, поэтому введенный вами поисковый запрос или страница, на которую вы перешли, не будут сброшены. Если обновление в реальном времени не включено, страница будет перезагружаться при любом использовании недействительности.
Интерфейс был разработан по принципу наличия только одного файла, который нужен каждому для начала работы. Для этого существует файл шаблона, языковые файлы, 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
только один раз, поэтому при последующих сборках это должно происходить немного быстрее!
В процессе сборки будет создан скомпилированный файл CSS в build/interface.css
, а javascript интерфейса будет в build/interface.js
. При желании вы, вероятно, могли бы использовать оба из них в своих собственных фреймворках и системах шаблонов.
CSS для интерфейса находится в файле build/_frontend/interface.scss
. Внесите там изменения, если хотите изменить цвета или форматирование.
Если вы внесете какие-либо изменения в файл scss, вам нужно будет запустить сценарий сборки, чтобы увидеть изменения.
Если вы хотите изменить сам интерфейс, обновите файл build/_frontend/interface.jsx
— по сути, это набор компонентов ReactJS. Здесь вы можете изменить макет виджета, работу списка файлов, нумерацию страниц и т. д.
Если вы внесете здесь изменения, запустите сценарий сборки еще раз.
Шаблон PHP-оболочки, используемый в процессе сборки и предназначенный для передачи различных битов данных на сторону ReactJS, находится по адресу build/template.phps
. Если вы хотите обновить используемую версию ReactJS или структуру HTML-оболочки (например, хотите передать дополнительные данные на сторону ReactJS), то это будет тот файл, который вы захотите обновить.
Для корректной работы интерфейса требуется несколько сторонних js-файлов. У вас есть возможность изменить место их получения (между CloudFare, JSDelivr и 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
, если вы ее предоставите.
Есть старая поговорка: «Если ты знаешь более одного языка, ты многоязычен, если нет — ты британец». Это не только осуждающее обвинение британского менталитета в отношении других языков, но и объясняет, почему пользовательский интерфейс до сих пор был только на английском языке - потому что я, несмотря на все мои грехи, британец.
Однако теперь можно создать интерфейс на другом языке. В настоящее время, благодаря участникам, также поддерживаются французский и испанский языки. Если кто-то еще хочет предоставить дополнительные языковые пакеты, отправьте запрос!
Если языковой пакет находится в каталоге 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, ключом которой является английская версия, которая соответствует тому, что находится в пользовательском интерфейсе, а значением является то, во что вы ее конвертируете, а в файле примера оно просто пустое. Если значение пустое или индекс для перевода не существует, будет использоваться только английская версия. Это дает вам возможность заменить некоторые или все строки интерфейса по своему усмотрению.
Чтобы начать работу с новым языком, скопируйте файл 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, если он отключен по какой-либо причине.
Версия 3.5.3
Устранены некоторые несоответствия со ссылками в документации opcache на php.net.
Версия 3.5.2
Удалены некоторые предупреждения для PHP 8.2 путем удаления namespace
и операторов use
в связанном файле index.php
.
Версия 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
с локальными js-файлами, а не с удаленными URL-адресами. Версия 3.3.1
Всего несколько незначительных доработок:
Версия 3.3.0
В основном добавлена информация JIT для PHP 8:
false
Если вы хотите включить JIT, вам необходимо ввести значение для ini-настройки opcache.jit_buffer_size, иначе оно отключено по умолчанию.
Если вы не используете 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
Уточнено размещение начального пространства имен CSS для удобства использования в плагине Moodle и, возможно, в других системах. Также подправил немного CSS.
Версия 2.5.3
Были добавлены имена классов CSS и обновлены правила стиля для их использования.
Версия 2.5.2
Исправление для значений optimisation_level, выпущенное в версии 2.5.1.
Версия 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, предоставляющего возможность беспрепятственно обновлять большую часть информации в режиме реального времени (ну, по умолчанию каждые пять секунд) - так что теперь файлы, а также обзор обновляются. Обновился внешний вид, в котором удалены градиенты и сделан более плоский вид. И код в целом претерпел капитальные изменения.
Версии графического пользовательского интерфейса доступны по адресу:
https://github.com/amnuts/opcache-gui/releases/
Некоторые люди задавались вопросом, работает ли opcache-gui на их экземпляре PHP-FPM, поскольку показанные файлы не являются всем, что кэшируется, и это отличается от того, что может показать Apache.
По сути, это ожидаемое поведение. И благодаря замечательному комментарию автора Michalng, это объяснение должно покрыть разницу:
Интерфейс может показывать только то, что он знает об использовании OPcache своего собственного экземпляра OPcache, поэтому, когда к нему обращаются через Apache с помощью mod_php, он может видеть только использование OPcache этого экземпляра OPcache веб-сервера Apache. Когда к нему обращаются с помощью классического CGI, он видит себя кэшируемым только при создании нового экземпляра PHP и OPcache, и в этом случае сам OPcache часто не имеет смысла.
Чтобы иметь возможность отслеживать и управлять OPcache для всех веб-приложений, всем необходимо использовать один и тот же FastCGI, то есть экземпляр PHP-FPM.
В случае Apache часто необходимо активно настроить его, чтобы он не использовал внутренний mod_php, а отправлял запросы обработчика PHP на общий сервер PHP-FPM через mod_proxy_fcgi, что также требует использования события MPM. В настоящее время это обычно считается предпочтительной настройкой, особенно для веб-сайтов с высоким трафиком. Это связано с тем, что каждый входящий запрос с prefork MPM + 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
Это будет просто случай удаления ?
от каждого из параметров.