На офсайте говорится "eAccelerator only works with mod_php or php in fastcgi mode. It can't be used in cgi or cli because eAccelerator needs to set up shared memory, and this can only be done when all php instances that need to access it are forks of the first process".
Что по-русски означает, что eAccelerator работает только, если PHP подключен как модуль Апача либо как FastCGI.
Будем ставить версию 0.9.6.1
Ставим все необходимое для сборки:
apt-get install -y php5-dev bzip2 make
Компилируем:
cd /usr/src
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
tar -xf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
phpize
./configure
make install
Очищаем систему после сборки
apt-get remove php5-dev
cd
rm -rf /usr/src/eaccelerator-0.9.6.1
rm -f /usr/src/eaccelerator-0.9.6.1.tar.bz2
Кстати, крайне рекомендую обратить внимание на файлик control.php в дистрибутиве, который предназначен для управления и мониторинга eAccelerator :) (спасибо Котеровским наблам, где это упомянуто)
--prefix тут, к сожалению, не работает, т.к. configure берет путь до библиотек из:
php-config --extension-dir
/usr/lib/php5/20060613
Создаем конфиг файл:
vi /etc/php5/conf.d/eaccelerator.ini
Вариантов подключения к PHP два - Zend Extension и обычное расширение, мне почему-то второй больше импонирует.
Вот стандартный конфиг:
extension="eaccelerator.so"
# eaccelerator.shm_size="16" # иначе получите проблемы на своем VPS
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
А вот мой оптимизированный:
extension="eaccelerator.so"
; размер shm памяти в мегабайтах
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
; памяти у нас много, будем кэшировать в ней
eaccelerator.shm_only="1"
; рекомендую отлючить
eaccelerator.compress="0"
eaccelerator.compress_level="9"
Создаем папки для кэша (тут, как понимаете, будут проблемы с FastCGI, т.к. в нем скрипты работают от имени юзеров, а не от имени Апача, как это победить - я хз пока что). Кстати, в случае SHM памяти все будет очень безопасно по причине, что shm блоки будут создаваться от имени пользователя, от которого запускается скрипт. Так что самый лучший вариант в случае FastCGI - отключение файлового кэша и расположение скомпилированного кода только в shm.
Это в случае использования только shm не требуется:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
А испытать работоспособность можно командой:
php -m | grep eAcc
eAccelerator
И, наконец, перезапускаем Апача:
/etc/init.d/apache2 restart
Также в результате может сломаться phpmyadmin, фиксить его так:
http://phpsuxx.blogspot.com/2009/11/g-phpmyadmin.html
Основано на:
http://www.eaccelerator.net/wiki/InstallFromSource
Обращаю внимание, в мане баг! В Дебияне /tmp/eaccelerator будет удалена при ребуте.
Также обращаю внимание, что при устанвоке размера памяти SHM более 32 бегабайт возможен облом в виде:
eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmmax.
Это, конечно, тоже фиксится, но нужно немного подтюнить ядро :)