30 июня, 2011

Ошибки в логах с open_basedir - File() is not within the allowed path(s)

Вчера наткнулся на проблему, что в error лог записывались следующие ошибки:

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 (версия – 0.9.6.1). Для решения проблемы качаем исходники eAccelerator (eaccelerator-0.9.6.1.tar.bz2), открываем файл eaccelerator.c строка 867:


Было:
if (php_check_open_basedir(realname TSRMLS_CC)) {
Стало:
if (php_check_open_basedir(p->realfilename TSRMLS_CC)) {


Diff:
--- eaccelerator.c 2010-06-01 00:21:14.000000000 +0400
+++ eaccelerator.c 2011-06-30 15:24:37.277788184 +0400
@@ -864,7 +864,7 @@
EACCELERATOR_PROTECT();
if (p != NULL && p->op_array != NULL) {
/* only restore file when open_basedir allows it */
- if (php_check_open_basedir(realname TSRMLS_CC)) {
+ if (php_check_open_basedir(p->realfilename TSRMLS_CC)) {
return NULL;
}
EAG(class_entry) = NULL;


Заново компилируем eAccelerator и устанавливаем

phpize && ./configure && make && make install
service httpd restart

4 комментария:

  1. Спасибо! Помогло.
    Сделал просто

    make && make install

    ОтветитьУдалить
  2. Я чуть не обалдел, пока искал, отчего начали вылазить ошибки (как всегда, правил много где, и внезапно всё стало падать).

    Спасибо большое!

    ОтветитьУдалить
  3. А можно немного подробней как на винде сделать от Diff и дальше.

    ОтветитьУдалить