통계, 설정, 캐시된 파일을 표시하고 정보에 대한 실시간 업데이트를 제공하는 Zend OPcache 정보에 대한 깔끔하고 반응성이 뛰어난 인터페이스입니다.
이 인터페이스는 ReactJS 및 Axios를 사용하며 최신 브라우저용이며 최소 PHP 7.1이 필요합니다.
MIT: http://acollington.mit-license.org/
당신이 이 작품을 어떤 식으로든 후원할 수 있고 후원하고 싶다면 정말 멋진 일이 될 것입니다. GitHub 후원 페이지를 통해 이를 수행할 수 있습니다.
또는 X(Twitter라고도 함)에서 X(Twitter라고도 함)를 사용하고 있다고 나에게 알리고 싶다면 그것도 좋을 것입니다! (엽서 그릇을 그리워하는 사람이 또 있나요?)
이 GUI를 사용하여 시작하는 방법에는 두 가지가 있습니다.
opcache-gui 사용을 시작하는 가장 쉬운 방법은 이 저장소를 복제하거나 웹 서버가 로드할 수 있는 위치에 index.php
파일을 복사/붙여넣기/다운로드하는 것입니다. 그런 다음 브라우저에서 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가 모두 인터페이스를 생성하는 데 사용되며 빌드 프로세스에서 함께 사용됩니다.
이 빌드 프로세스를 통해 사용되는 언어, 필요한 타사 자바스크립트 라이브러리가 포함되는 방식, 모양과 느낌, 심지어 핵심 구성 요소까지 원하는 대로 변경할 수 있습니다.
빌드 프로세스를 실행하려면 repo 루트에서 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 파일을 생성하고 인터페이스의 자바스크립트는 build/interface.js
에 있습니다. 원한다면 자신의 프레임워크와 템플릿 시스템 내에서 이 두 가지를 모두 사용할 수도 있습니다.
인터페이스의 CSS는 build/_frontend/interface.scss
파일에 있습니다. 색상이나 서식을 변경하려면 여기에서 변경하세요.
scss 파일을 변경한 경우 변경 사항을 보려면 빌드 스크립트를 실행해야 합니다.
인터페이스 자체를 변경하려면 build/_frontend/interface.jsx
파일을 업데이트하세요. 이는 기본적으로 ReactJS 구성 요소 집합입니다. 여기에서 위젯 레이아웃, 파일 목록 작동 방식, 페이지 매김 등을 변경할 수 있습니다.
여기에서 변경사항을 적용하려면 빌드 스크립트를 다시 실행하세요.
빌드 프로세스에 사용되며 다양한 데이터 비트를 ReactJS 측으로 전달하는 역할을 하는 래퍼 PHP 템플릿은 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를 인라인으로 유지하려면 php ./build/build.php -j
와 같이 빌드할 때 -j
또는 --local-js
플래그를 사용할 수 있습니다. 그러면 원격 스크립트 파일을 가져오고 js를 기본 index.php
파일에 포함시킵니다. 원격 파일로 다시 빌드하려면 플래그 없이 명령을 다시 실행하세요. 파일을 가져올 때 -r
옵션을 제공하는 경우 이를 고려합니다.
"한 가지 언어 이상을 알면 다국어 사용자이고, 그렇지 않으면 영국인이다"라는 옛말이 있습니다. 이는 다른 언어에 대한 영국인의 사고방식을 비난하는 것일 뿐만 아니라 왜 지금까지 UI가 영어로만 사용되었는지 설명합니다. 왜냐하면 저는 모든 죄에도 불구하고 영국인이기 때문입니다.
그러나 이제 다른 언어로 인터페이스를 구축하는 것이 가능해졌습니다. 현재는 기여자들 덕분에 프랑스어와 스페인어도 지원됩니다. 다른 사람이 추가 언어 팩을 제공하고 싶다면 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
에 필요한 모든 것이 포함되어 있습니다. 키가 UI의 내용과 일치하는 영어 버전인 간단한 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
php.net의 opcache 문서에 있는 링크의 일부 불일치 문제를 해결했습니다.
버전 3.5.2
번들 index.php
파일에서 namespace
및 use
문을 삭제하여 PHP 8.2에 대한 일부 경고를 제거했습니다.
버전 3.5.1
이것은 단지 3.5.0이지만 Packagist를 만족시키고 내 실수를 바로잡기 위해 수정된 버전 태그가 있습니다.
버전 3.5.0
이 버전은 빌드 프로세스에 자바스크립트가 포함되는 방식을 변경합니다.
-j
/ --local-js
플래그는 이제 자바스크립트를 별도의 파일로 보유하지 않고 index.php
파일에 포함시킵니다.-r
/ --remote-js
옵션이 추가되어 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
Moodle 플러그인 및 다른 시스템 내에서 원활하게 작동할 수 있도록 초기 CSS 네임스페이스의 세련된 배치. 또한 일부 CSS를 조정했습니다.
버전 2.5.3
CSS 클래스 이름이 추가되었고 이를 사용하도록 스타일 규칙이 업데이트되었습니다.
버전 2.5.2
v2.5.1에 추가된 optimisation_level 값에 대한 핫픽스입니다.
버전 2.5.1
몇 가지 버그 수정 및 최적화 수준 세부 사항 개선.
버전 2.5.0
개별 하이라이트 그래프를 켜거나 끄는 옵션과 함께 캐시된 키 비율을 표시하는 새로운 하이라이트 차트를 추가했습니다.
버전 2.4.1
주로 버그 수정
memory_consumption
및 max_file_size
구성 설정은 이제 사람이 읽을 수 있는 크기로 표시됩니다.file_cache_only
활성화된 경우 더 나은 처리 버전 2.4.0
로드 시 실시간이 활성화될 수 있도록 실시간 상태에 대한 쿠키 저장소를 추가합니다. 쿠키 이름과 TTL 길이는 구성에서 조정할 수 있습니다.
버전 2.3.0
인턴된 문자열 및 PHP 5.4 호환성에 대한 정보를 추가합니다.
버전 2.2.2
필터링 시 파일 목록 최적화를 가져옵니다.
버전 2.2.1
이제 게이지가 실시간 펄스로 업데이트되고 몇 가지 반올림 문제가 해결되었습니까?
버전 2.2.0
파일 목록을 켜거나 끌 수 있는 기능 제공(기본값은 켜짐)
버전 2.1.0
이제 폴링 시간, 캐시 재설정 기능 전환, 실시간 업데이트 등 일부 옵션을 구성하는 훨씬 쉬운 방법을 제공합니다. 또한 큰 값(메모리 사용량 및 적중률)을 게이지로 표시할 수도 있습니다. 큰 숫자 대신 그래프.
버전 2.0.0
React.js 사용을 소개하면 더 많은 정보를 실시간(기본적으로 5초마다)으로 원활하게 업데이트할 수 있는 기능이 제공되므로 이제 파일과 개요가 새로 고쳐집니다. 그라데이션을 제거하고 더 평평한 느낌을 주는 업데이트된 모양이 있습니다. 그리고 코드 전반에 걸쳐 전면적인 점검이 이루어졌습니다.
GUI 릴리스는 다음 위치에서 구할 수 있습니다.
https://github.com/amnuts/opcache-gui/releases/
많은 사람들이 opcache-gui가 PHP-FPM 인스턴스에서 작동하는지 의문을 제기했습니다. 표시된 파일이 캐시된 모든 것이 아닌 것처럼 보이고 Apache에서 표시할 수 있는 것과 다르기 때문입니다.
본질적으로 이는 예상되는 동작입니다. 그리고 기여자 Michalng의 훌륭한 의견 덕분에 이 설명에서는 차이점을 다룰 수 있습니다.
인터페이스는 자체 OPcache 인스턴스의 OPcache 사용량에 대해 알고 있는 정보만 표시할 수 있으므로 mod_php를 사용하여 Apache를 통해 액세스하면 해당 Apache 웹 서버 OPcache 인스턴스의 OPcache 사용량만 볼 수 있습니다. 클래식 CGI를 사용하여 액세스하면 새 PHP와 OPcache 인스턴스가 생성될 때 자신이 캐시되는 것을 볼 수 있으며, 이 경우 OPcache 자체는 의미가 없는 경우가 많습니다.
모든 웹 애플리케이션에 대한 OPcache를 모니터링하고 관리하려면 모두 동일한 FastCGI, 즉 PHP-FPM 인스턴스를 사용해야 합니다.
Apache의 경우 내부 mod_php를 사용하지 않고 mod_proxy_fcgi를 통해 공유 PHP-FPM 서버에 PHP 핸들러 요청을 보내도록 적극적으로 구성해야 하는 경우가 많습니다. 이 경우 MPM 이벤트도 사용해야 합니다. 이는 일반적으로 요즘 특히 트래픽이 많은 웹사이트에서 선호되는 설정으로 간주됩니다. 이는 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
그냥 제거하는 경우가 될까요 ?
각 매개변수에서.