APC в PHP: Понятие, установка, использование APC


APC – это аббревиатура от Alternative PHP Caching. Русским текстом – это альтернативный PHP кэшер. Для чего он используется? Как и другие популярные кэшеры, такие как XCache и eAccelerator, он используется для увеличения скорости работы PHP скриптов. Если вы имеете собственный сервер, и вас волнуют вопросы быстродействия PHP скриптов, то APC может стать решением вашей проблемы. В сегодняшней статье мы более подробно узнаем о APC, научимся его устанавливать и тестировать, использовать APC кеширование при написании 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

При этом идут выполнения компиляции кода при каждом запросе. Это отнимает много время на обработку запроса, потому и тормозит. Для обхода этого и придумали акселераторы, представителем которого является APC. Они кэшируют скомпилированный код на диске, после обращения к которому, он выводит результат. Таким образом увеличивается скорость работы PHP. APC может работать в двух режимах, которые настраиваются в файле /etc/php.d/apc.ini, переменная apc.stat. Переменная может принимать значения 1 и 0 (apc.stat=0 или apc.stat=1). При использование режима apc.stat=1 несколько замедляется работа скриптов так, как идет проверка на модификацию файла, но это позволяет избежать проблем, когда код изменен, а выдача результата остается прежней. Поэтому советую поставить значение переменной 1.

После установки акселератора APC, схема выполнения запроса будет следующей:

Применение APC для PHP

Установка 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

Использование памяти расширением 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


Дискуссия по теме    15 Комментариев
Добавить комментарий
Alex 22.01.2016 в 12:43
Благодарю! Подробно и ёмко освещено!
Сергей 26.06.2014 в 08:03
Здравствуйте, статья отличная! Я пользуюсь хостингом, там за доп. плату подключил персональный веб-сервер с модулями APC, eAccelerator и XCache. Сейчас включен только APC т.к. с eAccelerator и XCache у них конфликт. Скажите пожалуйста, какой модуль лучше? И как влияет на дальнейшую работу сайта эти модули, я имею ввиду в будущем не будет ли загружаться память на сервере или хостинге. Прошу прощение за тупость. Спасибо
Вадим 20.06.2014 в 08:20
Спасибо Вам за чудесную статью!
Генадий 19.07.2013 в 20:42
и чего ? Интерпретатор компилирующего типа - это означает то что Php может компилировать код, но это не значит что это компилируемый язык. Если бы был опыты работы с нормальными компилируемыми языками программирования, никогда бы не назвали компилируемым то что не компилируется
Тарас 19.07.2013 в 23:08
Цитата с википедии: "Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина)." Насколько я понимаю, сразу код компилируется в байт-код, после чего последний интерпретируется. Даже, согласно Вашим словам: "Php может компилировать", я могу использовать в статье словосочетание "компиляция кода". Собственно, что не так в тексте статьи? Укажите цитату, я пересмотрю, исправлю.
xaseros 31.10.2014 в 13:59
Идите и комментируйте статьи к "нормальным компилируемым" языкам. Ваше высокомерие можете оставить при себе. Что до формы, то компиляция или интерпретация это лишь методики перевода кода программы на языке программирования, в код исполняемый процессором или виртуальной машиной. И в php давно уже используются обе методики. Да почти во всех платформах для разработки можно увидеть совмещение этих двух подходов.Даже программы на C предварительно, построчно проверяются препроцессором и линковщиком. Так, что нет никакого повода упрекать php (и тех кто на нем пишет) в этом плане.
Генадий 18.07.2013 в 18:35
А вы в курсе что PHP это интерпретируемый язык а не компилируемый ? Что в нем компилируется ?
Тарас 19.07.2013 в 02:43
Точно! А еще точнее "Тип исполнения: интерпретатор компилирующего типа" http://ru.wikipedia.org/wiki/PHP
Count Raven 08.11.2012 в 10:30
Блин, картинке ошибка. Что 3-й класс школы - не, не слышал? МодифицЫровался через И пишется, вообще всегда после Ц идет И, а не Ы в подобных случаях, только если на конце, то Ы, например, птицы.
Тарас 08.11.2012 в 23:02
В вашем комментарии также ошибка - "Блин, картинке ошибка." Там должна быть буква "В".
vitalik 16.12.2012 в 14:15
Для этого "умника" есть хорошая поговорка. Глупость все видит; разум многое не станет замечать. (Б.Ф.Андреев)
Count Raven 16.12.2012 в 17:45
У меня это просто опечатка, тем более, в комментарии. Это не ошибка. А вот на изображении в статье действительно ошибка, которую неплохо было бы поправить.
Димчег 16.02.2014 в 18:45
Ага, конечно. Цыган на цыпочках подошел к цыпленку и цыкнул: «Цыц.
Nikolay 07.09.2012 в 01:11
У вас небольшая ошибочка по тексту: "Они кэшируют скомпилированный код на диске". Опкод кешируется не на диске, а в оперативной памяти.
vitalik 16.12.2012 в 14:08
Вы наверно не в курсе, что можно создать диск и в оперативной памяти? Почитайте хотя бы чем инстинктивно писать.
Добавить комментарий
Просмотров: 77438
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price