eAccelerator и open_basedir

Наверно многие PHP разработчики работали с таким акселератором, как eAccelerator. eAccelerator является PHP-акселератором, основное назначение которого состоит в кэшировании бинарного представления кода. Каждый раз при выполнении скрипта, PHP читает все подключаемые файлы и переводит их в бинарный код, при запросе скрипта операция повторяется. Задача eAccelerator состоит в сохранении бинарного кода для повторного использования, уменьшая время выполнения скрипта. Быстрый, простой, легкий в настройке. Что еще пожелать?

В новых версиях (а именно с 0.9.6 и 0.9.6.1) была найдена неприятная вещь. При компиляции по умолчанию, а именно через такой набор команд:

  1. phpize
  2. ./configure
  3. make
  4. make install


начинаются проблемы с PHP, а именно:

  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 в сочетании с этой опцией приводит к фатальным ошибокам в скриптах.

Решение:

  1. phpize
  2. ./configure --without-eaccelerator-use-inode
  3. make
  4. make install


Вот и все!

28. июля 2010 by Alexey Vasiliev
Categories: PHP, разработка | Tags: , | Комментарии отключены