Андрей Уваров
В статье «Кэширование веб-сценариев» февральского номера журнала была
затронута тема оптимизации сайтов. Рассмотренный способ является несколько
трудоёмким. Одним из более эффективных решений является PHPAccelerator. О нём,
собственно, и пойдет разговор в данной статье.
Итак, что же такое PHPAccelerator (PHPA)? Это расширение, подключаемое к
PHP-компилятору, которое за счёт кэширования ускоряет работу скриптов. В
вышеупомянутой статье мы ускоряли работу скриптов за счёт кэширования их
вывода, но в данном случае кэширование подразумевает устранение чтения кода,
его грамматического разбора, компилирования, многих операций выделения памяти и
копирования, а также, отчасти, дисковых операций. Очень важно, что для
кэширования скриптов мы не должны изменять каким-либо образом код. Это является
большим плюсом и экономит наше время, по сравнению с организацией кэширования скриптов
вручную. Находится PHPAccelerator по адресу: http://php-Accelerator.co.uk и
является полностью бесплатным. В настоящий момент существуют версии для
платформ: Linux, OpenBSD, FreeBSD, BSDi и Solaris. Возможно, в будущем в этот
список будет включена и Windows. Стоит также заметить, что PHPAccelerator
совместим только с веб-сервером Apache, но как надеются разработчики, будет
осуществлена поддержка и для других веб-серверов, из которых следующим является
Zeus.
Установка PHPAccelerator даже для неискушённого
пользователя представляет собой дело весьма простое. Скачав архив с нужной
версией и распаковав его, мы получаем несколько файлов характера «readme», phpa_
cashe_admin и собственно саму библиотеку с названием вроде
«php_accelerator_1.3.3r2.so». Для установки необходимо скопировать эту библиотеку
в то место, где, по вашему мнению, она должна находиться, обычно это /usr/local/lib
(лично мне больше нравится /usr/local/lib/phpa). В качестве следующего шага
необходимо добавить в файле php.ini полный путь к месту, где находится PHPAccelerator.
Например:
zend_extension=/usr/local/lib/phpa/php_accelerator_1.3.3r2.so
по причине того, что PHPAccelerator не является модулем, используется
параметр zend_extension.
Если вы используете модуль «dbg.so», то для
корректной работы вам скорее всего придётся его отключить, так как он является
несовместимым с PHPAccelerator. Для того чтобы все совершённые нами изменения
вступили в силу, необходимо перезагрузить веб-сервер. Как и было обещано,
установка не представила никаких трудностей.
После инсталляции возникает вопрос: «А как
проверить, работает ли PHPAccelerator?».
Существует несколько способов проверить
вызывающий у нас сомнения факт.
Способ 1
При работе PHPAccelerator добавляет к HTTP-заголовку ответа параметр: X-Accelerated-By.
Вы можете проверить это, выполнив команду HEAD.
Например:
[dashin@dashin home]HEAD
http://dashin/test.php
200 OK
Connection: close
Date: Sun, 01 Feb
2004 06:21:34 GMT
Accept-Ranges: bytes
Server: Apache/2.0.40
(ASPLinux)
Content-Type: text/html;
charset=ISO-8859-1
Client-Date: Sun,
01 Feb 2004 06:21:34 GMT
Client-Response-Num:
1
X-Accelerated-By:
PHPA/1.3.3r2
X-Powered-By:
PHP/4.2.2
[dashin@dashin home]
Способ 2
Дело в том, что если PHPAccelerator установлен, то в массиве $GLOBALS
создаётся ключ _PHPA. Вот пример простого скрипта, выводящего содержимое этой
переменной:
<?php
var_dump($GLOBALS['_PHPA']);
?>
Если всё в порядке, то результат должен быть
примерно следующим:
array(3) {
["ENABLED"]=>
bool(true)
["iVERSION"]=>
int(10302)
["VERSION"]=>
string(5) "1.3.2"
}
В противном случае будет выведено «NULL». Чтобы
определить, в чём заключается неисправность, заглянем в error_log (error_log
является местом, куда веб-сервер сохраняет сведения о возникающих ошибках и
некоторую другую служебную информацию, обычно этот файл располагается в
каталоге /var/log/httpd). Наличие сообщения, подобного следующему:
Failed loading /usr/local/lib/phpa/php_accelerator_1.3.3r2.so:
/usr/local/lib/phpa/php_accelerator_1.3.3r2.so:
undefined symbol: _ecalloc
свидетельствует о несовместимости PHPAccelerator
с установленной версией PHP. В этой ситуации вам необходимо скачать нужную
версию PHPAccelerator и заменить ей старую. Это решит возникшую перед вами
проблему.
Установив PHPAccelerator, уже можно наслаждаться
повышением быстродействия. Ознакомиться с тестами производительности, можно по
адресу: http://www.php-accelerator.co.uk/perfomance.php.
Но, как говорится, нет предела совершенству. Вы
можете самостоятельно изменить настройки посредством добавления соответствующих
ключей в файл php.ini и присвоения им нужных вам значений. Таким образом, можно
определить файлы или каталоги, которые не должны подвергаться кэшированию,
установить промежуток времени, через который будет осуществляться чистка кэша
(чистка кэша заключается в удалении кэшированных файлов, срок жизни которых
истёк, т.е. тех, которые не использовались дольше установленного времени).
Более подробно о настройке говорить не стоит, так как всё очень подробно
описано в файле CONFIGURATION, поставляемом вместе с PHPAccelerator, да и
особых трудностей возникнуть не должно.
Единственное, что хочется добавить, так это то,
что, приступая к настройке, да и вообще использованию, вы должны быть уверены в
том, что знаете, насколько часто вызываются и обновляются ваши скрипты, иначе
вы просто не получите должного результата.