eaccelerator open_basedir restriction in effect.

Проблема очень старая, но исправлять ее авторы не собираются.
После установки (как это сделать правильно ниже) eaccelerator по стандартным мануалам в сети или из пакетов репозиториев в error.log сайтов начинают сыпаться ошибки:

PHP Warning: require(): open_basedir restriction in effect. File() is not within the allowed path(s);
PHP Warning: Unknown: open_basedir restriction in effect. File() is not within the allowed path(s);


Чтобы исправить проблему, нужно собрать и установить eaccelerator из исходников, немного подправив их.

Сделаем правильную установку:
1. Centos удалим eaccelerator, если был взят из репозиториев:

yum remove php-eaccelerator

2. Установим необходимое для сборки
Centos

yum groupinstall "Development Tools"
yum install php-devel re2c gcc gcc-c++ autoconf automake kernel-headers 

Debian

apt-get install php5-dev build-essential make re2c gcc g++

3. Качаем исходники

cd /var/tmp
wget //acelnmp.googlecode.com/files/eaccelerator-0.9.6.1.tar.bz2
tar -xvf eaccelerator-0.9.6.1.tar.bz2 && chown -R root:root /var/tmp

4. Вот тут самый важный момент — исправляем ошибку:
открываем файл /var/tmp/eaccelerator-0.9.6.1/eaccelerator.c и в районе 864 строки ищем

if (php_check_open_basedir(realname TSRMLS_CC)) {

и меняем на

if (php_check_open_basedir(p->realfilename TSRMLS_CC)) {

Сохраняем изменения.

5. Собираем

cd /var/tmp/eaccelerator-0.9.6.1
phpize
./configure
make
make install

6. Подключаем к php:
Centos добавить файл eaccelerator.ini в /etc/php.d/
Debian добавить файл eaccelerator.ini в /etc/php5/conf.d
содержимое

[eaccelerator]
extension="eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir = "/var/cache/php-eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator.log"
eaccelerator.name_space = ""
eaccelerator.check_mtime="1"
eaccelerator.filter=""
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.allowed_admin_path = ""
eaccelerator.shm_max="4M"
;eaccelerator.compress="1"
;eaccelerator.compress_level="7"

7. Создаем папки под кеш

mkdir -p /var/cache/php-eaccelerator
chmod 777 /var/cache/php-eaccelerator

8. Отключаем eaccelerator в phpmyadmin и настроим файл контроля:
Centos открыть /etc/httpd/conf.d/phpmyadmin.conf
Debian открыть /etc/apache2/conf.d/phpmyadmin.conf
изменить

<directory /usr/share/phpMyAdmin>
.....
</directory>

на

<directory /usr/share/phpMyAdmin>
php_admin_value eaccelerator.enable 0
.....
</directory>

Копируем файл контроля состояния еакселератора:

cp control.php /var/www/путь_до_вашего_сайта

И в скопрованном файле исправляем на свои логин/пароль входа:

...
$user = "admin";
$pw = "eAccelerator";
...

9. Рестартим апач и проверяем правильность подключения
Centos

service httpd restart
php -v
#PHP 5.3.27 (cli) (built: Dec 16 2013 07:00:49)
#Copyright (c) 1997-2013 The PHP Group
#Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
#with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator

Debian

service apache2 restart
php -v
#PHP 5.3.3-7+squeeze3 with Suhosin-Patch (cli) (built: Jun 28 2011 13:13:26)
#Copyright (c) 1997-2009 The PHP Group
#Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
#with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
#with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

Открываем //сайт.ру/control.php и смотрим состояние.

Update 23.20.15
В версии eaccelerator 1.0-dev для php 5.4 такой ошибки нет, соответственно процесс сборки немного проще:

cd /var/tmp
wget https://github.com/eaccelerator/eaccelerator/archive/master.zip --no-check-certificate
unzip master.zip && chown -R root:root /var/tmp
cd /var/tmp/eaccelerator-master
phpize
./configure
make
make install

Далее делаем по аналогии начиная с пункта 6.

P.S. и небольшое дополнение как менять размер выделяемой памяти.
За размер отвечает параметр

eaccelerator.shm_size="32"

Простая смена размера (например на 128) влечет невозможность запуска апача. В еррор.лог будут сыпаться ошибки:

#eAccelerator: Could not allocate 134217728 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.
#PHP Warning:  [eAccelerator] Can not create shared memory area in Unknown on line 0
#PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0

Для исправления проблемы надо расширить лимиты в ОС (на примере 128Мб):

echo 134217728 > /proc/sys/kernel/shmmax
cat /proc/sys/kernel/shmmax
#134217728

В файле /etc/sysctl.conf прописать

kernel.shmmax = 134217728

Выполнить для применения параметров:

sysctl -p
ipcs -l

и перезагрузить апач, ошибок не будет, он запустится в нормальном режиме.

2 комментария

Александр Тимуца on 26.09.2014 at 16:42.

пробую метод…

Ответить

kgtu5

kgtu5 on 26.09.2014 at 21:49.

Александр Тимуца правильно выбирайте версию eaccelerator‘a: 0.9.6.1 для php 5.1-5.3, 1.0-dev для php 5.4

Ответить

Скажите свое мнение

ваш email не публикуется. обязательно *

;-) :yawn: :whew: :toivo: :tmi: :time: :thinking: :talking: :sweating: :swear: :sun: :star: :smoke: :smirk: :sleepy: :skype: :shock: :shake: :rofl: :rain: :punch: :puke: :poolparty: :pizza: :phone: :party: :oops: :nod: :no: :ninja: :neutral: :nerd: :music: :muscle: :mrgreen: :movie: :mooning: :mmm: :middlefinger: :makeup: :mail: :mad: :lol: :lipssealed: :kiss: :itwashtme: :inlove: :idea: :hi: :heidy: :heart: :headbang: :happy: :handshake: :giggle: :fubar: :flower: :evilgrin: :emo: :dull: :drunk: :drink: :doh: :devil: :dance: :cry: :cool: :coffie: :clapping: :cash: :call: :cake: :bug: :brokenheart: :bow: :blush: :beer: :bear: :bandit: :arrow: :angry: :angel: :^) :???: :?: :-| :-o :-P :-D :-) :-( :!:

 

*

code

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.