- → Программирование
- → PHP
- → Статьи
APC в PHP: Понятие, установка, использование APC
APC – это аббревиатура от Alternative PHP Caching. Русским текстом – это альтернативный PHP кэшер. Для чего он используется? Как и другие популярные кэшеры, такие как XCache и eAccelerator, он используется для увеличения скорости работы PHP скриптов. Если вы имеете собственный сервер, и вас волнуют вопросы быстродействия PHP скриптов, то APC может стать решением вашей проблемы. В сегодняшней статье мы более подробно узнаем о APC, научимся его устанавливать и тестировать, использовать APC кеширование при написании PHP скриптов.
Сегодня мы узнаем
Что такое акселератор APC?
Акселератор APC (Alternative PHP Cache) - бесплатный и открытый opcode кэшер для PHP. Он был задуман, как бесплатный, открытый и стабильный фреймворк для кэширования и оптимизации исходного кода PHP. APC находится на стадии своего развития. На данный момент поддерживает PHP 4 и PHP 5, включая 5.3. Предположительно будет включен в стандартное ядро PHP шестой версии.
Каким образом достигается ускорение работы PHP?
Когда идет задержка загрузки вашего сайта, возникает вопрос – Почему? Дело в том, что при выполнении стандартного обращения к PHP скрипту, каждый раз он компилируется заново. То есть, одна и та же работа делается несколько раз. Если это маленький проект, замедления в работе могут быть незначительными, даже невидимыми. Но если у вас большой проект (сайт), то вы замечали, что при обращении идет задержка загрузки страницы, несмотря на то, что сайт хорошо оптимизирован, в плане сжатия html и сжатия css. Для наглядности, посмотрим, как выполняется стандартный запрос без использования PHP акселераторов:
При этом идут выполнения компиляции кода при каждом запросе. Это отнимает много время на обработку запроса, потому и тормозит. Для обхода этого и придумали акселераторы, представителем которого является APC. Они кэшируют скомпилированный код на диске, после обращения к которому, он выводит результат. Таким образом увеличивается скорость работы PHP. APC может работать в двух режимах, которые настраиваются в файле /etc/php.d/apc.ini, переменная apc.stat. Переменная может принимать значения 1 и 0 (apc.stat=0 или apc.stat=1). При использование режима apc.stat=1 несколько замедляется работа скриптов так, как идет проверка на модификацию файла, но это позволяет избежать проблем, когда код изменен, а выдача результата остается прежней. Поэтому советую поставить значение переменной 1.
После установки акселератора APC, схема выполнения запроса будет следующей:
Установка APC
APC очень простой в установке. Его можно устанавливать как на Debian/Ubuntu, так и на другие дистрибутивы.
Установка APC на CentOS, RHEL, Fedora:
Будем устанавливать через PECL. Сначала подключаем .repo, который содержит актуальный APC. Смотрите пример ниже:
wget http://rpm.scwlab.com/el/php/yum.conf -O /etc/yum.repos.d/stalwart.repo
yum install php-pecl-apc
Теперь, измените настройки файла /etc/php.d/apc.ini на свой вкус и сделайте рестарт сервера.
Установка APC на Debian, Ubuntu
apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++
pecl install apc
После загрузки, откройте файл по адресу /etc/php5/apache2/php.ini, добавьте параметр extension=apc.so, и перезапустите сервер.
Как видите, установить APC на Debian или Ubuntu, достаточно просто, нужно набрать в консоли команду sudo aptitude install php-apc. Также можно установить это расширение через synaptic. Если у вас другой дистрибутив, то вы можете установить пакет APC из PECL. Для этого выполните в консоле следующую команду sudo pecl install apc.
Проверка наличия пакета APC
Если в файле настроек php.ini, присутствует строка загрузки пакета extension=apc.so. Или создан файл apc.ini с идентичной строкой, в папке конфигурации расширений PHP. У каждого дистрибутива, он находится по своему адресу. Для Debian, это /etc/php5/apache2/conf.d/.
Если вы проверили и убедились, что все хорошо, перезапустите сервер. Теперь проверим информацию о самом пакете APC. Для этого найдите папку в которой было установлено расширение. В папке вы найдете файл по имени apc.php. Этот файл, также присутствует в архиве установки. Скопируйте его в любую директорию из сайтов вашего сервера. Например, что-бы он был доступен по адресу http://sitear.ru/apc.php. Если пакет был установлен успешно, то при загрузке этого файла, вы увидите следующую таблицу информации о текущем APC пакете.
Использование APC в PHP
Использовать расширение APC при написании PHP кода, очень просто и удобно. Сейчас вы сами убедитесь в этом.
Для начала, мы напишем класс, для работы с памятью через APC систему кэширования. Создайте файл и поместите туда код по следующему адресу:
classes/apc.caching.php
<? class CacheAPC { var $iTtl = 600; // Time To Live var $bEnabled = false; // APC enabled? // конструктор function CacheAPC() { $this->bEnabled = extension_loaded('apc'); } // получаем данные с памяти function getData($sKey) { $bRes = false; $vData = apc_fetch($sKey, $bRes); return ($bRes) ? $vData :null; } // сохраняем данные в память function setData($sKey, $vData) { return apc_store($sKey, $vData, $this->iTtl); } // удаляем данные с памяти function delData($sKey) { $bRes = false; apc_fetch($sKey, $bRes); return ($bRes) ? apc_delete($sKey) : true; } } ?>
В классе описано, что делает каждая из функций. Теперь создадим тестовый файл.
index.php
<?php $aData = array( 'name' => 'table', 'color' => 'brown', 'size' => array( 'x' => 200, 'y' => 120, 'z' => 150, ), 'strength' => 10, ); require_once('classes/apc.caching.php'); $oCache = new CacheAPC(); echo 'Данные: <pre>'; // Посмотрим что мы имеем print_r($aData); echo '</pre>'; if ($oCache->bEnabled) { // Если APC доступен $oCache->setData('my_object', $aData); // Сохраняем данные в памяти $oCache->setData('our_class_object', $oCache); // Сохраняем объект класса в памяти echo 'По теории, мы сохранили данные в памяти, нажмите <a href="ndex2.php">здесь</a> для проверки, действительно ли все там.'; } else { echo 'Пакет APC не установлен, установите, а потом будете тестировать!'; } ?>
В этом файле мы сохранили 2 объекта в память: массив и объект класса. Теперь создадим второй файл.
index2.php
<?php require_once('classes/apc.caching.php'); $oCache = new CacheAPC(); if ($oCache->bEnabled) { // Если APC доступен $aMemData = $oCache->getData('my_object'); // Получаем данные из памяти $aMemData2 = $oCache->getData('our_class_object'); // получаем данные из памяти, которые в классе echo 'Данные в памяти: <pre>'; // проверим, что у нас в памяти print_r($aMemData); echo '</pre>'; echo 'Данные из памяти объекта CacheAPC class: <pre>'; print_r($aMemData2); echo '</pre>'; echo 'Как видите все данные доступны, теперь давайте извлечем их из памяти, для этого идем <a href="index3.php">сюда</a>…'; } else { echo 'Пакет APC не установлен, установите, а потом будете тестировать!'; } ?>
В данном скрипте, мы только читаем информацию из памяти. Как вы видите, вся информация отлично считывается с памяти. Давайте посмотрим последний пример.
index3.php
<?php require_once('classes/apc.caching.php'); $oCache = new CacheAPC(); if ($oCache->bEnabled) { // Если APC доступен $oCache->delData('my_object'); // Извлечение данных из памяти $oCache->delData('our_class_object'); // Извлечение данных из памяти $aMemData = $oCache->getData('my_object'); // пытаемся получить данные обратно $aMemData2 = $oCache->getData('our_class_object'); echo 'Данные из памяти: <pre>'; // Проверим, что у нас хранится в памяти print_r($aMemData); echo '</pre>'; echo 'Данные из памяти объекта CacheAPC class: <pre>'; print_r($aMemData2); echo '</pre>'; echo 'Как видите все данные извлечены из памяти. Ура!'; } else { echo 'Пакет APC не установлен, установите, а потом будете тестировать!'; } ?>
Заключение
Спасибо за ваше внимание! Надеюсь вам было интересно почитать об использовании APC в PHP. Если вы имеете другие представления об использовании APC при написании PHP скриптов, напишите об этом в комментариях.
Дальше: Счетчик подписчиков FeedBurner на PHP















Development — Taras Moroz