Categories

Новые шаблоны

Решение ошибки «Open_basedir restriction in effect. File(X) is not within the allowed path(s): Y»

Alex Ross Октябрь 22, 2012
Rating: 3.3/5. From 15 votes.
Please wait...

Функция PHP open_basedir — это мера безопасности, которая предотвращает открытие файлов и скриптов, которые находится вне «домашней» директории. Если настройка PHP open_basedir включена, то все файловые операции ограничиваются одной папкой на сервере, не допуская доступа к скриптам неавторизованных пользователей. Когда скрипт пытается открыть файл, который находится вне корневой директории, например fopen() или gzopen(), проверяется путь у файлу. Когда файл находится вне разрешенной директории, PHP откажет в его выполнении и появится ошибка, вида:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/home/user_name/public_html/wp-content/uploads/2006/12/picture.jpg) is not within the allowed path(s): (/home/user_name:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/user_name/public_html/wp-admin/inline-uploading.php on line 226

Ознакомьтесь с официальным руководством по PHP, чтобы узнать больше о функции open_basedir.

Мы рекомендуем Вам обратиться в Вашему хостинг-провайдеру, чтобы исправить ошибку.

Есть два способа решения проблемы:

  1. Решением может послужить отключение этой функции, либо разрешение доступа к файлам некоторым привилегированным учетным записям, либо же разрешить доступ PHP скриптам к некоторым папкам.

    • Если Вы используете cPanel WebHost Manager (WHM), Вы можете легко отключить опцию open_basedir, или исключить некоторых пользователей из списка, для разрешения им доступа. В секции “Security” откройте “Tweak Security”, затем нажмите “Configure” для “Php open_basedir Tweak”. Здесь Вы можете включить или отключить php фунцию open_basedir, добавить или убрать некоторые хосты.

    • Если Вы используете панель управления хостингом Plesk, Вам нужно будет вручную отредактировать файл конфигурации Apache — vhost.conf и vhost_ssl.conf, и добавить или изменить линии php_admin_value open_basedir на следующие:

      php_admin_value open_basedir none php_admin_value open_basedir /full/path/to/dir:/full/path/to/directory/httpdocs:/tmp

      Пути к папкам (вверху пример), которые находятся после open_basedir, это директории, к которым разрешен доступ для PHP скриптов на сервере. Вы можете добавить сюда больше файлов и папок, разделяя их двоеточием “:”. Будьте внимательны, чтобы не нарушить безопасность Вашей системы.

      После завершение, запустите команду ниже, чтобы изменения вступили в силу и перезапустите Apache httpd сервер (apache2ctl restart или httpd restart)

  2. Если нужно вручную отредактировать настройки Apache, чтобы выключить защиту PHP open_basedir, откройте файл httpd.conf, найдите линию, которая начинается так:

    php_admin_value open_basedir …..

    Чтобы отключить функцию для определенной учетной записи на сервере, используйте следующую строчку:

    php_admin_value open_basedir none
  3. Вы всегда можете ограничить защиту для определенных папок, без его полного отключения функции open_basedir. Для этого просто внесите список разрешенных папок, разделяя их двоеточием. Например, для разрешения доступа к директории /new_directory код будет таким:

    php_admin_value open_basedir “/home/user_account/:/usr/lib/php:/usr/local/lib/php:/tmp” php_admin_value open_basedir “/home/user_account/:/usr/lib/php:/usr/local/lib/php:/tmp:/new_directory

    Перезапустите Apache сервер. Обратите внимание, что ограничение ввреху, это только префикс, а сама папка. Т.е. использование, к примеру, “open_basedir = /dir/incl” также откроет доступ к папкам “/dir/include” или “/dir/incls”, если таковые имеются. Для ограничения доступа только к одной специфической директории, используйте слеш в конце: “open_basedir = /dir/incl/”.

Эта запись была размещена в ЧАВО о хостинге, Ошибки сайта и сервера и помечена как effect, open_basedir, restriction. Добавьте в закладки постоянную ссылку.

Submit a ticket

Если вы не смогли найти подходящее решение проблемы, пожалуйста воспользуйтесь следующей ссылкой, чтобы отправить запрос команде технической поддержки.
Отправить запросВы получите ответ в течение 24 часов