Как определить, включен ли PHP OPcache?

Я пытаюсь включить opCache на своем сервере (ubuntu 12.04 LTS, apache 2.4.7 работает с PHP Version 5.5.10-1+deb.sury.org~precise+1).

Прежде чем начать что-либо делать, я прочитал этот очень актуальный пост, в котором мне говорилось, что opCache отключен по умолчанию, и мне нужно вручную включить это.

Я зашел в php.ini и обнаружил, что там нет текста с opcache.so, также все, что связано с opcache, закомментировано. Нравится:

[opcache]
; Determines if Zend OPCache is enabled
;opcache.enable=0

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

Это нормально, потому что человеку сказали, что он инвалид. Но когда я обращаюсь к phpinfo();, он показывает мне следующее (и, исходя из моего понимания, он говорит мне, что opCache уже используется).

введите описание изображения здесь

Итак, мой opcache включен и используется, и как я могу его увидеть / проверить?


person Salvador Dali    schedule 31.03.2014    source источник
comment
вы перезагружали сервер перед запуском phpinfo()   -  person Victory    schedule 01.04.2014
comment
@Victory Я только что перезапустил его, и результат тот же. (кроме чисел в кэше попаданий 3, кеш-промахов 2). Также используются / освобождаются кеши памяти скриптами / ключами. Что на самом деле приближает меня к мысли, что он уже запущен.   -  person Salvador Dali    schedule 01.04.2014
comment
У меня та же проблема, но мои ценности не меняются .. i.imgur.com/JwEaGwu.png какой-нибудь совет?   -  person Revious    schedule 29.09.2016


Ответы (2)


Доверяйте своему phpinfo(), у вас есть необходимый общий модуль, иначе он не появится.

Кроме того, ваш opcache действительно включен, но только для Интернета, а не для cli. По умолчанию библиотека включена для Интернета, поэтому, чтобы отключить, раскомментируйте строку, начинающуюся с точки с запятой, например:

 opcache.enable=0 

Как уже отмечалось, для использования php в командной строке по умолчанию отключено, чтобы включить его, раскомментируйте и установите значение 1

 opcache.enable_cli=1

Вот список всех аргументов среды выполнения и их значение по умолчанию для дальнейшего использования: http://www.php.net/manual/en/opcache.configuration.php

ОБНОВЛЕНИЕ: с 2020 года эта библиотека может больше не поддерживаться, другие возможные варианты см. В комментариях ниже.

Если вам нужна классная страница веб-монитора (например, apc.php для apc), попробуйте следующее: https://github.com/rlerdorf/opcache-status

person Ray    schedule 31.03.2014
comment
Хорошо, спасибо. По-видимому, мне нужно доверять phpinfo больше, чем высоко оцененным ответам. Спасибо, что подтвердили это. - person Salvador Dali; 01.04.2014
comment
@SalvadorDali Другой пост, на который вы ссылаетесь, относительно того, присутствует ли и загружена ли общая библиотека расширения. Я думаю, было бы ясно заявить, что общий модуль не может быть настроен для загрузки по умолчанию php 5.5 build, но это не означает, что он «отключен», он даже не загружен. Очевидно, в вашей установке включена общая библиотека для модуля. После включения модуля вы используете настройки конфигурации I, чтобы не включать и выключать определенные функции, а также включать / отключать определенные функции. - person Ray; 01.04.2014
comment
по какой-то причине я думаю, что этот ответ будет иметь большой успех в ближайшие пару лет :) - person mamdouh alramadan; 01.04.2014
comment
Я пробую это на PHP 5.4, но он показывает, что используется 1 ключ. Вероятно, это тот, который используется opcached.php (opcache-status). Несмотря на то, что запрашивается много других страниц. Я предполагаю, что opcache работает как apc и кэширует все скомпилированные файлы php. Возможно, отчет неверен, поскольку composer.json действительно говорит php > 5.5, но opcache можно установить на php > 5.3, возможно, я попробую другой отчет - person HMR; 10.06.2014
comment
Модуль , вероятно, загружен, но не в php.ini, а через /etc/php5/apache2/conf.d/05-opcache.ini, и по умолчанию он включен, если модуль загружен. - person hbogert; 17.10.2015
comment
просто хотел сказать, что если вам нужно проверить это с вашего cli, вы можете запустить php -i | grep opcache - person mutant_city; 26.10.2018
comment
github.com/rlerdorf/opcache-status давно не обновлялся. Попробуйте github.com/amnuts/opcache-gui. Его регулярно обновляют. - person Umair Khan; 03.07.2020
comment
@UmairKhan Спасибо за обновление, добавили обновление в ответ. - person Ray; 04.07.2020
comment
@Ray. Добро пожаловать. Я попытался отредактировать сообщение сам, но предложение по редактированию было отклонено в пользу комментария вместо редактирования ответа. :-П - person Umair Khan; 06.07.2020

По какой-то причине существует много противоречивой документации о PHP OPcache для PHP v5.5 (версия, которая сначала поддерживала его), причем некоторые веб-страницы говорят, что он включен по умолчанию, а другие говорят, что он скомпилирован, но не включен по умолчанию .

Исходя только из моей памяти, я думаю, что видел установки PHP 5.5 и 5.6, где OPcache действительно был скомпилирован, но еще не включен. Это объясняет, почему по умолчанию строка php.ini отключена. Путаница, вероятно, связана с различными способами компиляции PHP.

В любом случае, по разным причинам кажется, что в PHP 7+ почти всегда включен OPcache. по умолчанию, и опять же, избегая сложных обсуждений повторной компиляции.

Все, что сказано, вопрос OP действительно для проверки, включен ли OPcache или нет (только).

Для этого существует специальная функция opcache_get_status для этого, который также может принимать массивы . В будущем эта функция, вероятно, станет более популярной, поскольку она больше предназначена для объяснения параметров конфигурации OPcache, чем php.ini, и может использоваться в различных сценариях и т. Д.

Вот небольшой пример:

<?php (is_array(opcache_get_status()) ? 'enabled' : 'disabled') ?>

Ссылка: https://www.digitalocean.com/community/questions/enable-php-5-5-opcache-on-ubuntu-14-04-with-nginx-and-php-fpm?comment=25376

person Jesse Nickles    schedule 16.11.2020
comment
также обратите внимание, что вы можете проверить function_exists ('opcache_get_status'), чтобы избежать фатальных ошибок - person Ramon Fincken; 05.02.2021
comment
Я получаю разные результаты в зависимости от того, звоню я echo "starting test\nopcache status:".is_array(opcache_get_status()) ? 'enabled' : 'disabled'; или просто echo is_array(opcache_get_status()) ? 'enabled' : 'disabled'; - это немного неудобно ... - person clockw0rk; 23.02.2021