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
這只是刪除?
的情況。來自每個參數。