Журнал Системный Администратор, Июнь 2004

Журнал Системный Администратор

Июнь 2004

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Оптимизация работы PHP при помощи PHPAccelerator

Андрей Уваров

В статье «Кэширование веб-сценариев» февральского номера журнала была затронута тема оптимизации сайтов. Рассмотренный способ является несколько трудоёмким. Одним из более эффективных решений является  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, да и особых трудностей возникнуть не должно.

Единственное, что хочется добавить, так это то, что, приступая к настройке, да и вообще использованию, вы должны быть уверены в том, что знаете, насколько часто вызываются и обновляются ваши скрипты, иначе вы просто не получите должного результата.




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению