Antarmuka yang bersih dan responsif untuk informasi Zend OPcache, menampilkan statistik, pengaturan dan file cache, dan menyediakan pembaruan informasi secara real-time.
Antarmuka ini menggunakan ReactJS dan Axios dan ditujukan untuk browser modern, serta memerlukan minimal PHP 7.1.
MIT: http://acollington.mit-license.org/
Jika Anda mampu dan ingin mensponsori pekerjaan ini dengan cara tertentu, itu akan sangat luar biasa. Anda dapat melakukannya melalui halaman Sponsor GitHub.
Atau, jika Anda hanya ingin memberi saya sapaan di X (alias, Twitter) untuk mengatakan Anda menggunakannya, itu juga luar biasa! (Adakah orang lain yang melewatkan perangkat kartu pos?)
Ada dua cara untuk mulai menggunakan gui ini:
Cara termudah untuk mulai menggunakan opcache-gui adalah dengan mengkloning repo ini, atau cukup salin/tempel/unduh file index.php
ke lokasi yang dapat dimuat oleh server web Anda. Kemudian arahkan browser Anda ke lokasi tersebut, seperti https://www.example.com/opcache/index.php
.
Anda dapat memasukkan file dengan Composer dengan menjalankan perintah composer require amnuts/opcache-gui
.
Setelah berada di direktori vendor
Anda, ada banyak cara untuk menggunakan antarmuka. Misalnya, jika Anda menggunakan kerangka kerja seperti Symfony atau Laravel, Anda dapat memuat opcache-gui ke dalam Controller
. Persyaratan Anda untuk menyiapkannya dalam kerangka pilihan Anda akan berbeda-beda, jadi tidak mungkin untuk merinci cara melakukannya dalam bacaan ini... tapi saya yakin pada kemampuan Anda untuk mengetahuinya!
Namespace yang digunakan untuk kelas tersebut adalah AmnutsOpcache
, jadi setelah ketergantungan ada di autoload.php
Anda, Anda dapat menggunakan kelas AmnutsOpcacheService
. Misalnya, Anda dapat melakukan sesuatu seperti:
<?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 ();
Kemudian Anda dapat membuat tampilan apa pun yang Anda inginkan untuk menampilkan detail opcache. Meskipun ada antarmuka berbasis React yang cukup rapi tersedia untuk Anda di repo ini.
Alternatifnya, sertakan vendor/amnuts/opcache-gui/index.php
secara langsung dan ini akan memberi Anda hasil yang sama seperti hanya menyalin/menempelkan index.php
di suatu tempat.
<?php
// assuming location of: /var/www/html/opcache.php
require_once __DIR__ . ' /../vendor/amnuts/opcache-gui/index.php ' ;
Anda bahkan dapat membuat symlink ke index.php
yang ada di direktori vendor
:
ln -s /var/www/vendor/amnuts/opcache-gui/index.php /var/www/html/opcache.php
Pada dasarnya, ada banyak cara untuk mengaktifkan dan menjalankan antarmuka - pilih mana yang sesuai dengan kebutuhan Anda.
Konfigurasi default untuk antarmuka terlihat seperti ini:
$ 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
];
Jika Anda ingin mengubah salah satu default, Anda dapat meneruskan default yang ingin Anda ubah saja jika Anda ingin membiarkan sisanya apa adanya. Ubah saja array di bagian atas skrip index.php
(atau teruskan array secara berbeda ke kelas Service
).
Misalnya, yang berikut ini hanya akan mengubah allow_reset
dan refresh_time
tetapi tetap mempertahankan nilai lainnya sebagai default:
$ opcache = ( new Service ([
' refresh_time ' => 2 ,
' allow_reset ' => false
]))-> handle ();
Atau contoh ini untuk memberi kesan sedikit lebih "bajakan" pada tab:
$ 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 ();
Ikhtisar akan menunjukkan kepada Anda semua informasi inti. Dari sini Anda akan dapat melihat host dan platform apa yang Anda jalankan, versi OPcache apa yang Anda gunakan, kapan terakhir kali direset, fungsi dan arahan yang tersedia (dengan tautan ke manual php.net), dan semua statistik yang terkait dengan OPcache (jumlah hit, memori yang digunakan, memori bebas dan terbuang, dan banyak lagi).
Semua file yang saat ini ada di cache tercantum di sini beserta statistik terkaitnya.
Anda dapat memfilter hasilnya untuk membantu menemukan skrip tertentu yang Anda cari dan mengubah cara pengurutan file cache. Dari sini Anda dapat membatalkan validasi cache untuk masing-masing file atau membatalkan cache untuk semua file yang cocok dengan pencarian Anda.
Jika Anda tidak ingin menampilkan daftar file sama sekali maka Anda dapat menggunakan opsi allow_filelist
; menyetelnya ke false
akan menyembunyikan daftar file sama sekali.
Jika Anda ingin menyesuaikan panjang penomoran halaman, Anda dapat melakukannya dengan opsi konfigurasi per_page
.
Jika Anda telah menyiapkan daftar file yang tidak ingin Anda cache dengan memberikan nilai opcache.blacklist_filename
, maka daftar file akan dicantumkan dalam tab ini.
Jika Anda belum menyediakan opsi konfigurasi tersebut di file php.ini
maka tab ini tidak akan ditampilkan. Jika Anda menyetel opsi allow_filelist
ke false
maka tab ini tidak akan ditampilkan terlepas dari pengaturan ini.
PHP 7.4 memperkenalkan kemampuan untuk melakukan pramuat sekumpulan file di awal server melalui pengaturan opcache.preload
di file php.ini
Anda. Jika Anda telah mengaturnya maka daftar file yang dimuat sebelumnya secara khusus akan dicantumkan dalam tab ini.
Seperti halnya file yang diabaikan, jika Anda belum memberikan pengaturan ini, atau opsi allow_filelist
adalah false
, maka tab ini tidak akan ditampilkan.
Anda dapat mengatur ulang seluruh cache serta memaksa file individual, atau kelompok file, menjadi tidak valid sehingga file tersebut akan di-cache lagi.
Penyetelan ulang dapat dinonaktifkan dengan menggunakan opsi konfigurasi allow_reset
dan allow_invalidate
.
Antarmuka dapat melakukan polling sesering mungkin untuk mendapatkan tampilan baru pada opcache. Anda dapat mengubah seberapa sering hal ini terjadi dengan opsi konfigurasi refresh_time
, yaitu dalam hitungan detik.
Ketika pembaruan real-time aktif, antarmuka akan secara otomatis memperbarui semua nilai sesuai kebutuhan.
Selain itu, jika Anda memilih untuk membatalkan validasi file apa pun atau menyetel ulang cache, hal ini akan dilakukan tanpa memuat ulang halaman, sehingga istilah pencarian yang Anda masukkan, atau halaman yang Anda navigasikan tidak akan disetel ulang. Jika pembaruan real-time tidak aktif maka halaman akan dimuat ulang jika ada penggunaan yang tidak valid.
Antarmukanya telah dirancang dengan prinsip hanya memiliki satu file yang dibutuhkan siapa pun untuk dapat aktif dan berjalan. Untuk memenuhi hal ini, ada file templat, file bahasa, jsx dan css, yang semuanya digunakan untuk membuat antarmuka dan disatukan dalam proses pembangunan.
Proses pembangunan ini akan memungkinkan Anda mengubah bahasa yang digunakan, cara menyertakan pustaka javascript pihak ketiga yang diperlukan, tampilan dan nuansa, atau bahkan komponen inti, sesuai keinginan Anda.
Untuk menjalankan proses build, jalankan perintah php ./build/build.php
dari root repo (Anda memerlukan nodejs
dan npm
yang sudah diinstal). Setelah dijalankan, Anda akan melihat output seperti:
Installing node modules
Building js and css
Creating single build file
Using remote js links from 'cloudflare'
Done!
Skrip build hanya perlu menginstal node_modules
satu kali, jadi pada build selanjutnya akan lebih cepat!
Proses build akan membuat file css yang dikompilasi di build/interface.css
dan javascript antarmuka akan berada di build/interface.js
. Anda mungkin bisa menggunakan keduanya dalam kerangka kerja dan sistem templating Anda sendiri, jika Anda mau.
CSS untuk antarmuka ada di file build/_frontend/interface.scss
. Lakukan perubahan di sana jika Anda ingin mengubah warna atau format.
Jika Anda membuat perubahan apa pun pada file scss maka Anda harus menjalankan skrip build untuk melihat perubahannya.
Jika Anda ingin mengubah antarmuka itu sendiri, perbarui file build/_frontend/interface.jsx
- ini pada dasarnya adalah sekumpulan komponen ReactJS. Di sinilah Anda dapat mengubah tata letak widget, cara kerja daftar file, penomoran halaman, dll.
Jalankan kembali skrip build jika Anda melakukan perubahan di sini.
Templat pembungkus PHP yang digunakan dalam proses pembuatan, dan berfungsi untuk meneruskan berbagai bit data ke sisi ReactJS, terletak di build/template.phps
. Jika Anda ingin memperbarui versi ReactJS yang digunakan, atau bagaimana struktur html pembungkusnya (seperti ingin meneruskan hal-hal tambahan ke sisi ReactJS), maka ini adalah file yang ingin Anda perbarui.
Antarmuka memerlukan beberapa file js pihak ketiga agar berfungsi dengan benar. Anda memiliki opsi untuk dapat mengubah tempat pengambilannya (antara CloudFare, JSDelivr, dan Unpkg), atau Anda dapat memiliki js js yang sepenuhnya lokal dan in-line (misalnya, Anda memiliki kebijakan CSP dan url jarak jauhnya adalah tidak masuk daftar putih).
Untuk mengubah lokasi sumber daya pihak ketiga, gunakan opsi -r
atau --remote-js
diikuti dengan cloudflare
, jsdelivr
, atau unpkg
. Misalnya, jika Anda ingin menggunakan jsdelivr maka jalankan perintah build seperti ini: php ./build/build.php -r jsdelivr
. Ini defaultnya adalah cloudflare
.
Jika Anda ingin js in-line, Anda dapat menggunakan flag -j
atau --local-js
saat membuat, seperti php ./build/build.php -j
. Ini akan mengambil file skrip jarak jauh dan menyematkan js ke file index.php
utama. Jika Anda ingin membangunnya lagi dengan file jarak jauh, jalankan kembali perintah tanpa tanda. Mengambil file akan mempertimbangkan opsi -r
Anda jika Anda menyediakannya.
Ada pepatah lama yang mengatakan, "Jika Anda tahu lebih dari satu bahasa, Anda multibahasa, jika tidak, Anda orang Inggris." Hal ini tidak hanya merupakan dakwaan yang memberatkan terhadap mentalitas orang Inggris terhadap bahasa lain, namun juga menjelaskan mengapa UI sejauh ini hanya menggunakan bahasa Inggris - karena, dengan segala dosa saya, saya adalah orang Inggris.
Namun, sekarang dimungkinkan untuk membangun antarmuka dengan bahasa yang berbeda. Saat ini, berkat kontributor, bahasa Prancis dan Spanyol juga didukung. Jika ada orang lain yang ingin menyumbangkan paket bahasa tambahan, silakan kirimkan PR!
Jika paket bahasa ada di direktori build/_languages/
maka Anda dapat menggunakannya dengan flag -l
atau --lang
. Misalnya, jika ada paket bahasa fr.json
maka Anda dapat menggunakan php ./build/build.php -l fr
untuk membangun dengan bahasa tersebut.
Ada beberapa skrip komposer yang ditambahkan untuk membantu pembangunan. Mereka adalah, composer build
, composer build-french
, dan composer build-spanish
.
Jika Anda ingin membuat file bahasa, maka build/_languages/example.json
berisi semua yang Anda butuhkan. Ini adalah struktur json sederhana dengan kuncinya adalah versi bahasa Inggris yang cocok dengan apa yang ada di UI, dan nilainya adalah apa yang Anda konversi - yang dalam file contoh hanya kosong. Jika suatu nilai kosong atau indeks tidak ada untuk terjemahan, maka hanya akan menggunakan versi bahasa Inggris. Ini memberi Anda kemampuan untuk mengganti beberapa atau semua string antarmuka sesuai keinginan Anda.
Untuk memulai dengan bahasa baru, salin example.json
ke bahasa yang Anda inginkan yang belum ada - misalnya, pt-br.json
atau pirate.json
. Kemudian isi terjemahannya ke dalam nilainya. Setelah selesai, bangun kembali dengan php ./build/build.php -l pt-br
atau php ./build/build.php -l pirate
.
Versi 3.5.5
Menambahkan terjemahan bahasa Spanyol berkat @cvc90 (PR#110)
Versi 3.5.4
Penanganan yang lebih baik apakah JIT diaktifkan atau dinonaktifkan. Sekarang juga menunjukkan mengapa ini mungkin dinonaktifkan meskipun Anda telah mengaktifkan pengaturannya. Antarmuka juga menonaktifkan grafik dan statistik memori dengan benar untuk JIT jika dinonaktifkan karena alasan apa pun.
Versi 3.5.3
Mengatasi beberapa ketidakkonsistenan dengan tautan dalam dokumentasi opcache di php.net.
Versi 3.5.2
Menghapus beberapa peringatan untuk PHP 8.2 dengan menghapus pernyataan namespace
dan use
dalam file index.php
yang dibundel.
Versi 3.5.1
Ini hanya 3.5.0 tetapi dengan tag versi yang diperbaiki untuk membuat Packagist senang dan memperbaiki kesalahan saya.
Versi 3.5.0
Versi ini mengubah cara proses pembangunan menyertakan javascript.
-j
/ --local-js
sekarang menyematkan javascript ke dalam file index.php
daripada menjadikannya sebagai file terpisah-r
/ --remote-js
telah ditambahkan untuk memungkinkan Anda memutuskan dari mana Anda mendapatkan file pihak ketiga (baik saat diambil secara lokal atau saat ditambahkan sebagai tautan skrip jarak jauh), dengan cloudflare
, jsdelivr
, atau unpkg
tersedia pilihan Versi 3.4.0
Versi ini menambahkan lebih banyak informasi tentang file dalam cache, dan memungkinkan lebih banyak konfigurasi melalui konfigurasi dan skrip build.
datetime_format
baru untuk pemformatan nilai tanggal/waktu yang fleksibelmodified
file cache ke output (saat file ditambahkan atau diperbarui)index.php
dengan file js lokal, bukan url jarak jauh Versi 3.3.1
Hanya beberapa perubahan kecil:
Versi 3.3.0
Sebagian besar menambahkan informasi JIT untuk PHP 8:
false
Jika Anda ingin mengaktifkan JIT, Anda harus memasukkan nilai untuk pengaturan opcache.jit_buffer_size ini, jika tidak maka akan dinonaktifkan secara default.
Jika Anda tidak menggunakan PHP 8, antarmuka akan memberikan kompensasi dan tidak menampilkan informasi JIT tambahan.
Versi 3.2.1
Rilis pemeliharaan kecil ke:
Versi 3.2.0
Memperbarui ReactJS ke versi terbaru dan bekas yang diperkecil dan membuat sedikit perbaikan pada opsi pengurutan ketika tidak ada penomoran halaman.
Versi 3.1.0
Menambahkan kemampuan untuk mengurutkan daftar file cache dalam berbagai cara.
Versi 3.0.1
Pembaruan kecil yang akan menggunakan http atau https untuk mendapatkan perpustakaan javascript, bergantung pada apa yang Anda gunakan.
Versi 3.0.0
Meskipun antarmukanya sebagian besar terlihat sama, ada penulisan ulang yang lengkap! Beberapa perubahan yang lebih penting adalah:
Versi 2.5.4
Penempatan namespace css awal yang disempurnakan agar berfungsi dengan baik dalam plugin Moodle dan mungkin sistem lainnya. Juga mengubah beberapa CSS.
Versi 2.5.3
Nama kelas CSS telah ditambahkan dan aturan gaya diperbarui untuk menggunakannya.
Versi 2.5.2
Perbaikan terbaru untuk nilai tingkat_optimasi yang dikeluarkan di v2.5.1.
Versi 2.5.1
Beberapa perbaikan bug dan peningkatan pada detail tingkat pengoptimalan.
Versi 2.5.0
Menambahkan bagan sorotan baru untuk memperlihatkan persentase kunci yang disimpan dalam cache dengan opsi untuk mengaktifkan/menonaktifkan grafik sorotan individual.
Versi 2.4.1
Sebagian besar perbaikan bug
memory_consumption
dan max_file_size
sekarang ditampilkan sebagai ukuran yang dapat dibaca manusiafile_cache_only
aktif Versi 2.4.0
Menambahkan penyimpanan cookie untuk keadaan real-time yang memungkinkan real-time diaktifkan saat memuat. Nama cookie dan panjang TTL dapat disesuaikan di konfigurasi
Versi 2.3.0
Menambahkan informasi untuk string yang diinternir dan kompatibilitas PHP 5.4
Versi 2.2.2
Menghadirkan pengoptimalan untuk daftar file saat memfilter
Versi 2.2.1
Apakah alat pengukur sekarang diperbarui dengan denyut waktu nyata dan beberapa masalah pembulatan telah diperbaiki
Versi 2.2.0
Memberikan kemampuan untuk menghidupkan/mematikan daftar file (defaultnya aktif)
Versi 2.1.0
Sekarang menyediakan cara yang lebih mudah untuk mengonfigurasi beberapa opsi, baik itu waktu polling, mengubah kemampuan untuk mereset cache, pembaruan real-time, dll. Ini juga memungkinkan Anda untuk menampilkan nilai besar (penggunaan memori dan hit rate) sebagai ukuran grafik, bukan angka besar.
Versi 2.0.0
Memperkenalkan penggunaan React.js yang memberikan kemampuan untuk memperbarui lebih banyak informasi dengan lancar secara real-time (yah, setiap lima detik secara default) - jadi sekarang file serta ikhtisarnya disegarkan. Ada tampilan yang diperbarui, menghilangkan gradien dan memberikan kesan lebih datar. Dan kode secara umum telah mengalami perombakan.
Rilis GUI tersedia di:
https://github.com/amnuts/opcache-gui/releases/
Sejumlah orang mempertanyakan apakah opcache-gui berfungsi pada instance PHP-FPM mereka, karena file yang ditampilkan sepertinya bukan semua yang di-cache, dan itu berbeda dengan apa yang mungkin ditampilkan Apache.
Pada dasarnya, itu adalah perilaku yang diharapkan. Dan berkat komentar bagus dari kontributor Michalng, penjelasan ini dapat mencakup perbedaannya:
Antarmuka hanya dapat menampilkan apa yang diketahuinya tentang penggunaan OPcache dari instance OPcache miliknya sendiri, sehingga ketika diakses melalui Apache dengan mod_php, maka antarmuka hanya dapat melihat penggunaan OPcache dari instance OPcache server web Apache tersebut. Ketika diakses dengan CGI klasik, ia hanya dapat melihat dirinya di-cache ketika instance PHP dan OPcache baru dibuat, dalam hal ini OPcache sendiri sering kali tidak masuk akal.
Untuk dapat memonitor dan mengelola OPcache untuk semua aplikasi web, semua harus menggunakan FastCGI yang sama, yaitu instance PHP-FPM.
Dalam kasus Apache, seseorang sering kali perlu mengkonfigurasinya secara aktif agar tidak menggunakan mod_php internalnya tetapi mengirim permintaan pengendali PHP ke server PHP-FPM bersama melalui mod_proxy_fcgi, yang juga memerlukan penggunaan acara MPM. Hal ini umumnya dipandang sebagai pengaturan yang disukai saat ini, terutama untuk situs web dengan lalu lintas tinggi. Hal ini karena setiap permintaan masuk dengan prefork MPM + mod_php membuat proses anak sendiri yang memerlukan waktu dan memori tambahan, sedangkan dengan acara MPM dan server PHP-FPM khusus, thread pengendali yang sudah menunggu (biasanya) digunakan di Apache dan di PHP, hampir tidak memakan memori atau waktu tambahan untuk proses pemijahan.
Skrip memerlukan PHP 7.1 atau lebih tinggi. Saya tidak tergoda untuk menurunkan versi kode agar kompatibel dengan versi 7.0, dan semoga sebagian besar orang sudah melakukan upgrade sekarang. Namun saya sangat menghargai bahwa terkadang orang tidak memiliki kemampuan untuk mengubah versi PHP yang mereka gunakan karena hal tersebut di luar kendali mereka. Jadi jika Anda salah satu yang kurang beruntung, Anda dapat melakukan perubahan berikut pada index.php
(atau Service.php
dan menjalankan skrip build). Untuk garis:
public function getOption(?string $name = null)
public function getData(?string $section = null, ?string $property = null)
public function resetCache(?string $file = null): bool
Ini hanya masalah menghapus ?
dari masing-masing param.