php и eAccelerator
Что такое: PHP accelerator & optimizer
Ubuntu 10.04.3 LTS x64 - в пакетах нет уже собранного eAccelerator'а, значит будем собирать самостоятельно.
- Ставим необходимый софт для сборки:
# apt-get install build-essential php5-dev
- Переходим в папку где будем собирать, я использую /usr/src/
# cd /usr/src
- Берем свежий пакет с сайта eAccelerator :
# wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
- Распаковываем
# tar xvf eaccelerator-0.9.6.1.tar.bz2
- Заходим в папку
# cd eaccelerator-0.9.6.1
- Подготавливаем все к сборке:
# phpize # ./configure --enable-eaccelerator=shared
- Собираем и устанавливаем:
# make # make install
Посмотрите пути, куда будет скопирован собранный eaccelerator.so, у меня это папка /usr/lib/php5/20090629/
- Подключаем eAcceletor: Можно отредактировать оригинальный php.ini или создать новый файл в папке conf.d которую использует PHP - в моем случае это /etc/php5/conf.d
# cd /etc/php5/conf.d # touch eaccelerator.ini
- Добавляем в файл следующие строки:
; Подключаем zend_extension = "/usr/lib/php5/20090629/eaccelerator.so" ; Размер кэша, в Мб. Не может быть больше чем /proc/sys/kernel/shmmax, (0 - использовать по умолчанию, 32 Мб) eaccelerator.shm_size = "0" ; Папка для хранения кэша eaccelerator.cache_dir = "/var/cache/eaccelerator" ; Переключатель модуля (1 - вкл и 0 - выкл) eaccelerator.enable = "1" ; Переключатель оптимизатора (1 - вкл и 0 - выкл) eaccelerator.optimizer = "1" ; Проверять время модификации файлов кеша для их перекомпиляции (1 - вкл и 0 - выкл) eaccelerator.check_mtime = "1" ; Добавляет отладочную информацию в лог (1 - вкл и 0 - выкл) eaccelerator.debug = "0" ; Куда писать отладочную информацию eaccelerator.log_file = "/var/log/eaccelerator.log" ; Фильтр расширений файлов которых надо кешировать. Например, "*.php *.phtml" eaccelerator.filter = "" ; Размер выделяемой памяти, в байтах. Допустимо вводить в формате 10240, 10K, 1M и т.д. (0 - безлимит) eaccelerator.shm_max = "0" ; Время жизни кеша, секунд eaccelerator.shm_ttl = "0" ; Период удаления старых данных из памяти, секунд (0 - не удалять) eaccelerator.shm_prune_period = "0" ; Использовать для кеша только память ( 0 - используется диск и память, 1 - только память) eaccelerator.shm_only = "0" ; Переключатель уровня сжатия (1 - вкл, 0 - выкл) eaccelerator.compress = "1" ; Степень уровня сжатия (1 - минимум, 9 - максимум) eaccelerator.compress_level = "7" ; Ограничивает запуск скрипта управления, аналог open_base_dir eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
- Создаем папку, куда будет складывать кэш во время работы eAccelerator:
# mkdir /var/cache/eaccelerator # chown www-data.www-data /var/cache/eaccelerator
- Ну и пора перезапускать Apache
# sudo service apache2 restart
Настроек в ini-файле много, описание можно посмотреть здесь: http://www.eaccelerator.net/wiki/Settings
Проверить а заработали ли все можно создав php-файл с текстом
<?php phpinfo(); ?>
Если после открытия этого файла нашлось упоминание eAccelerator - значит все заработало. Так же можно проверить папку /var/cache/eaccelerator на наличие новых файлов.
Увеличиваем объем используемой памяти
По умолчанию переменная eaccelerator.shm_size установлена в «0» - это означает использовать объем памяти, принятый в операционной системе по умолчанию. Для Debian/Ubuntu это всего 32 Mb. Мало, что же это за кэш такой? Будем увеличивать.
Добавляем в файл /etc/sysctl.conf строчку
kernel.shmmax = 268435456 # 256 Mb #kernel.shmmax = 494967295 # 512 Mb
и меняем в /etc/php5/conf.d/eaccelerator.ini
eaccelerator.shm_size = "256"
Чтобы изменения вступили в силу необходимо применить внесенные изменения в sysctl.conf и перезапустить веб-сервер
# sudo sysctl -p # sudo service apache2 restart
И зайдя на страничку управления eAccelerator можно посмотреть все ли заработало.
Траблшутинг
"Не работает" (с)
Если PHP обновлялся, то eAccelerator перестанет работать. Признаки простые: на страничке управления видим
Caching enabled no Optimizer enabled no Check mtime enabled no
хотя в файле конфигурации все включено, а команда
# php -m
пишет примерно следующее:
[eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.2-1ubuntu4.7. Rebuild it for your PHP version (5.3.2-1ubuntu4.9) or download precompiled binaries.
Решается просто: нужно заново пересобрать как указано выше. Если собираете в старом каталоге, то сначала надо его почистить:
# make clean
и затем собрать снова.
Проблема с open_basedir
При компиляции (в версиях 0.9.6 и 0.9.6.1) вылазит ошибка:
PHP Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s): (<your_open_basedir_dirs>) in Unknown on line 0
Все оказывается просто. При использовании директивы PHP open_basedir для обеспечения безопасности, нужно собрать eAccelerator с опцией –without-eaccelerator-use-inode
. Данный механизм хранения кэша не совместим с open_basedir, поэтому open_basedir в сочетании с этой опцией приводит к фатальным ошибкам в скриптах.
спасибо leopard: http://leopard.in.ua/2010/07/28/eaccelerator_open_basedir/
Ссылки
- Домашняя страничка - http://www.eaccelerator.net/ и https://eaccelerator.net/ и еще http://sourceforge.net/projects/eaccelerator/