Page 1 of 1

PHP Warning: file_exists(): open_basedir restriction in effect.

Posted: Sat Sep 03, 2016 8:35 am
by Borisss!
Ситуация следующая: Пытаюсь связать Wordpress c форумом XenForo
Для этого используется плагин XenWord, который обращается из WP к XF напрямую (указывается абсолютный путь).
Долго не мог понять, почему связка не работает (а должно работать по инструкции), пока не увидел логи со следующей ошибкой:

Code: Select all

PHP Warning:  file_exists(): open_basedir restriction in effect. File(/home/forum/web/forum.site.com/public_html/library/XenForo/Autoloader.php) is not within the allowed path(s): (/home/forum/web/ru.site.com/public_html:/home/forum/tmp) in /home/forum/web/ru.site.com/public_html/wp-content/plugins/xenword-3.0.2.03/xenword.php on line 85, referer: http://ru.site.com/wp-admin/admin.php?page=xenword
Насколько я понял, один сайт не дает другому лезть в свои папки :)
Как мне разрешить обращение к данному файлу (данной папке), чтобы не нарушить безопасность сервера (отключать целиком open_basedir совершенно не хочется). И можно ли разрешить обращение к файлу/папке от другого пользователя?
P.S. Установка новая, шаблоны стандартные...

Re: PHP Warning: file_exists(): open_basedir restriction in effect.

Posted: Mon Sep 05, 2016 1:22 pm
by skurudo
Отключать не нужно, достаточно добавить дополнительные директории в опцию open_basedir

Смотреть в конфигах - /home/$user/conf/web/apache2.conf

Re: PHP Warning: file_exists(): open_basedir restriction in effect.

Posted: Tue Sep 06, 2016 9:22 am
by Borisss!
Кажется сам допер уже на выходных, но все-таки уточню...
Я добавляю дополнительные директории в опции open_basedir в файле конфига Апача (у нужного пользователя). Т.к. у меня CentOS, то файл конфига, видимо, будет httpd.conf
Там есть 2 места, в которых прописана опция open_basedir: в разделе <Directory> и "в корне" (без всяких разделов). Нужно в обоих местах исправлять или только в каком-то одном?

Re: PHP Warning: file_exists(): open_basedir restriction in effect.

Posted: Tue Sep 06, 2016 11:50 am
by skurudo
У вас основная часть конфига выглядит вот так:

Code: Select all

   <Directory /home/user/web/domain.ru/public_html>
        AllowOverride All
        Options +Includes -Indexes +ExecCGI
        php_admin_value open_basedir /home/user/web/domain.ru/public_html:/home/admin/tmp
        php_admin_value upload_tmp_dir /home/user/tmp
        php_admin_value session.save_path /home/user/tmp
        php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"
    </Directory>
Править в одном месте:

Code: Select all

        php_admin_value open_basedir /home/user/web/domain.ru/public_html:/home/admin/tmp

Re: PHP Warning: file_exists(): open_basedir restriction in effect.

Posted: Wed Sep 07, 2016 5:46 am
by Borisss!
Странно, но конфиг одного из виртуальных хостов у меня выглядит следующим образом:

Code: Select all

    
    <Directory /home/forum/web/domen.ru/public_html>
        AllowOverride All
        Options +Includes -Indexes +ExecCGI
        php_admin_value upload_max_filesize 10M
        php_admin_value max_execution_time 20
        php_admin_value post_max_size  8M
        php_admin_value memory_limit 32M
        php_admin_flag mysql.allow_persistent  off
        php_admin_flag safe_mode off
        php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"
        php_admin_value open_basedir /home/forum/web/domen.ru/public_html:/home/forum/
        php_admin_value upload_tmp_dir /home/forum/tmp
        php_admin_value session.save_path /home/forum/tmp
    </Directory>
    <Directory /home/forum/web/domen.ru/stats>
        AllowOverride All
    </Directory>
    php_admin_value open_basedir /home/forum/web:/home/forum/tmp:/bin:/usr/bin:/usr/local/bin:/
    <IfModule mod_ruid2.c>
        RMode config
Получается, что параметр open_basedir в двух местах. Это ошибка или так и должно быть? И соответственно, путь вставлять в оба значения или только то, которое в разделе "Directory"?
Кстати, когда дописываю в open_basedir новый путь, при постинге сообщения возникает 500-я ошибка (upstream prematurely closed connection while reading response header from upstream)
Есть идеи, куда копать в этом случае?