Zend OPcache 信息的干净且响应灵敏的界面,显示统计信息、设置和缓存文件,并提供信息的实时更新。
该界面使用 ReactJS 和 Axios,适用于现代浏览器,并且至少需要 PHP 7.1。
麻省理工学院:http://acollington.mit-license.org/
如果您有能力并且愿意以某种方式赞助这项工作,那就太棒了。您可以通过 GitHub 赞助页面来做到这一点。
或者,如果您只是想在 X(又名 Twitter)上向我表示您正在使用它,那也太棒了! (还有人怀念明信片软件吗?)
有两种方法可以开始使用此 GUI:
开始使用 opcache-gui 的最简单方法是克隆此存储库,或者只需将index.php
文件复制/粘贴/下载到您的 Web 服务器可以加载的位置。然后将浏览器指向该位置,例如https://www.example.com/opcache/index.php
。
您可以通过运行命令composer require amnuts/opcache-gui
将文件包含到Composer 中。
进入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/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
(以秒为单位)更改发生这种情况的频率。
当实时更新处于活动状态时,界面将根据需要自动更新所有值。
此外,如果您选择使任何文件无效或重置缓存,它将在不重新加载页面的情况下执行此操作,因此您输入的搜索词或您导航到的页面不会重置。如果未启用实时更新,则页面将在任何失效使用时重新加载。
该界面的设计遵循这样的原则:只有一个文件可供任何人启动和运行。为了实现这一点,有一个模板文件、语言文件、jsx 和 css,它们都用于创建界面,并在构建过程中将它们组合在一起。
如果您愿意,此构建过程将允许您更改所使用的语言、所需的第 3 方 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
一次,因此在后续构建中它应该会更快一些!
构建过程将在build/interface.css
中创建一个已编译的 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 为未列入白名单)。
要更改第 3 方资源的位置,请使用-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
选项,则获取文件时将考虑该选项。
有句老话说:“如果你懂一种以上语言,你就是多语言者,如果你不懂,你就是英国人。”这不仅是对英国人对待其他语言的态度的严厉控诉,而且也解释了为什么用户界面到目前为止只采用英语——因为我是英国人,尽管我有很多罪过。
但是,现在可以使用不同的语言构建界面。目前,感谢贡献者,还支持法语和西班牙语。如果其他人想贡献额外的语言包,请提交 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,该接口还会正确禁用图形和内存统计信息。
版本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
选项,允许您决定从哪里获取第 3 方文件(本地获取或添加为远程脚本链接时),并且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
初始 css 命名空间的精细放置,可以在 Moodle 插件和可能的其他系统中很好地发挥作用。还调整了一些CSS。
版本2.5.3
添加了 CSS 类名并更新了样式规则以使用它们。
版本2.5.2
v2.5.1 中发布的 optimization_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 的使用,提供了实时无缝更新更多信息的能力(默认情况下每五秒更新一次) - 所以现在文件和概述都得到刷新。有一个更新的外观,消除了渐变并获得更平坦的感觉。代码总体上已经进行了彻底修改。
GUI 版本可在以下位置获取:
https://github.com/amnuts/opcache-gui/releases/
许多人质疑 opcache-gui 是否在他们的 PHP-FPM 实例上运行,因为显示的文件似乎并不是缓存的所有内容,这与 Apache 可能显示的不同。
本质上,这是预期的行为。感谢贡献者 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 处理程序请求发送到共享 PHP-FPM 服务器,这也需要使用事件 MPM。这通常被视为当今的首选设置,尤其是对于高流量网站。这是因为使用 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
这只是删除?
的情况。来自每个参数。