Действует ограничение open_basedir. Файл (/) находится за пределами разрешенного пути (путей):

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

Warning: is_writable() [function.is-writable]: 
open_basedir restriction in effect. 
File(/) is not within the allowed path(s):

20 ответов

Решение

Изменить open_basedir настройки в вашей конфигурации PHP (см. Конфигурация времени выполнения).

open_basedir Эта настройка в основном используется для предотвращения доступа PHP-скриптов для конкретного пользователя к файлам в учетной записи другого пользователя. Поэтому обычно любые файлы в вашей учетной записи должны быть доступны для чтения по вашим собственным сценариям.

Пример настроек через .htaccess если PHP работает как модуль Apache в системе Linux:

<DirectoryMatch "/home/sites/site81/">
    php_admin_value open_basedir "/home/sites/site81/:/tmp/:/"
</DirectoryMatch>

Измените настройки open_basedir в вашей учетной записи хостинга и установите для них значение none. Найдите параметр open_basedir, указанный в разделе "Настройки PHP" вашей Plesk/cPanel. Установите его в "none" из раскрывающегося списка. Я показал их на картинке панели Plesk.

Чтобы устранить эту ошибку, вы должны отредактировать файл httpd.conf. Еще раньше это можно было увидеть в phpinfo в директиве раздела apache2handler Server Root. Например, в моем случае это путь - / etc / httpd / httpd.conf. Откройте файл httpd.conf, найдите упоминание параметра open_basedir. И установить его на нет. (php_admin_value open_basedir none)

Если вы используете это с php file.php, Вам нужно отредактировать php.iniНайдите этот файл:

: locate php.ini
/etc/php/php.ini

И добавить путь к файлу open_basedir имущество:

open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/:/run/media/andrew/ext4/protected

Ларавель

Если у вас возникла эта проблема при использовании Laravel.

Зайти только в папку bootstrap/cacheи переименовать config.phpна все, что вы хотите, и перезагрузите сайт.

Для меня проблема была в плохих / отсутствующих значениях конфигурации для сервера Plesk, на котором все это работает. Я просто следовал инструкциям здесь: http://davidseah.com/blog/2007/04/separate-php-error-logs-for-multiple-domains-with-plesk/

Вы можете настроить PHP, чтобы иметь отдельный файл журнала ошибок для каждого определения VirtualHost. Хитрость заключается в том, чтобы точно знать, как его настроить, потому что вы не можете напрямую коснуться конфигурации, не сломав Plesk. Каждое доменное имя в вашем (dv) имеет свой собственный каталог в / var / www / vhosts. Типичный каталог имеет следующие каталоги верхнего уровня:

cgi-bin/
conf/
error_docs/
httpdocs/
httpsdocs/
...and so on

Вы захотите создать файл vhost.conf в папке conf / каталога домена со следующими строками:

php_value error_log /path/to/error_log
php_flag display_errors off
php_value error_reporting 6143
php_flag log_errors on

Измените первое значение, чтобы оно соответствовало вашей фактической установке (я использовал /tmp/phperrors.log). После того, как вы закончите редактирование файла vhost.conf, протестируйте конфигурацию из консоли с помощью:

apachectl configtest
…or if you don’t have apachectl (as Plesk 8.6 doesn’t seem to)…

/etc/init.d/httpd configtest

И, наконец, скажите Plesk, что вы внесли это изменение.

/usr/local/psa/admin/bin/websrvmng -a

У меня была эта проблема на одном из моих WordPress сайтов после обновления и / или переезда:)

Проверьте в таблице базы данных wp_options значение upload_path и отредактируйте ее правильно...

Отредактируйте файл php.ini или .user.ini, расположенный в основном каталоге.

      open_basedir = none

Если используется ispconfig3:

Перейдите в раздел Веб-сайт -> Параметры -> PHP open_basedir:

  • В этом поле описаны разрешенные пути, и каждый путь разделяется знаком ":"

/ var / www / clients / client2 / web3 / image: / var / www / clients / client2 / web3 / web: / var / www /... и так далее

  • Итак, здесь необходимо указать путь, к которому вы хотите получить доступ, в моем случае это:

/ var / www / clients / client2 / web3 / image:

  • Проблема возникает потому, что:

Когда сценарий пытается получить доступ к файловой системе, например, с помощью include или fopen(), проверяется расположение файла. Когда файл находится за пределами указанного дерева каталогов, PHP откажется получить к нему доступ.

Если у вас такая проблема с ispconfig3 и вы получили такую ​​ошибку

действует ограничение open_basedir. Файл (/var/www/clients/client7/web15) находится вне допустимых путей:.........

Чтобы решить эту проблему (в моем случае), просто установите PHP на SuPHP на панели сайта ispconfig3.

Надеюсь, это поможет кому-то:)

Путь, на который вы ссылаетесь, неверен, и не находится в каталоге directoryRoot вашего рабочего пространства. Попробуйте создать абсолютный путь к файлу, к которому вы хотите получить доступ, где вы, вероятно, теперь используете относительный путь...

Я использую Apache vhost-File для запуска PHP со специфичными для приложения ini-параметрами на моем сервере Windows. Поэтому я использую параметр -d команды php.

Я устанавливаю open_basedir для каждого приложения в качестве одной из этих опций.

Мне нужно было установить несколько URL-адресов как open_basedir, включая UNC-Path, и синтаксис для этого случая было немного сложно найти. Вы должны разделять пути точками с запятой, и если ваш первый путь начинается с буквы диска, вам, возможно, придется начинать список с точки с запятой. По крайней мере, у меня это работает.

Пример:

php.exe -d open_basedir=;d:/www/applicationRoot;//internal.unc.path/ressource/

Если вы работаете со стеком PHP IIS и имеете эту ошибку, обычно это быстрое исправление прав доступа.

Если вы сами управляете сервером Windows и имеете доступ, попробуйте следующее:

Перейдите к папке, которая вызывает у вас затруднения при записи, и щелкните правой кнопкой мыши по ней> открыть свойства> безопасность.

Посмотрите, какие пользователи имеют доступ к папке, какие только для чтения, а какие полные. У вас есть группа, которая блокирует запись?

Это исправление будет зависеть от настроек IIS. Используете ли вы анонимную аутентификацию с определенным пользователем IUSR или с идентификатором пула приложений?

В любом случае, в конечном итоге вы добавите новое полное разрешение на запись для одного из IUSR, IIS_IUSRS или удостоверения вашего пула приложений - как я уже сказал, это будет зависеть от вашей настройки и того, как вы хотите это сделать, Вы можете пройти по этому кроличьему отверстию в Google (один из таких постов - разрешения IIS_IUSRS и IUSR в IIS8). Для меня я использую anon с идентификатором пула приложений, чтобы мне было легче MACHINE_NAME\IIS_IUSRS с полным чтением / записью в любой папке temp или загрузки.

Мне не нужно ничего добавлять в мой open_basedir = в php.ini.

В дополнение к ответу @yogihosting, если вы используете DirectAdmin, выполните следующие действия:

  1. Перейдите на страницу входа в DirectAdmin. Обычно это порт 2222.
  2. Войдите как администратор. Его имя пользователяadmin по умолчанию.
  3. В "Уровне доступа" на правой панели убедитесь, что вы находитесь на "Уровне администратора". Если нет, замените его.
  4. В разделе "Дополнительные функции" щелкните "Пользовательские конфигурации HTTPD".
  5. Выберите домен, который хотите изменить.
  6. Введите конфигурации, которые вы хотите изменить, в текстовом поле вверху страницы. Вам следует рассмотреть существующий файл конфигурации и изменить значения на его основе. Например, если вы видите, чтоopen_basedir устанавливается внутри <Directory>, возможно, вам следует окружить свое изменение связанными <Directory> тег:

    <Directory "/path/to/directory">
        php_admin_value open_basedir none
    </Directory>
    
  7. После внесения необходимых изменений нажмите кнопку "Сохранить".

  8. Теперь вы должны увидеть свои изменения, сохраненные в файле конфигурации, если они были действительными.

Однако есть и другой способ редактирования файла конфигурации:

Внимание: будьте осторожны и выполняйте следующие действия на свой страх и риск, так как вы можете столкнуться с ошибками или это может привести к простою. Рекомендуемый способ - предыдущий, поскольку он предотвращает неправильное изменение файла конфигурации и показывает ошибку.

  1. Войдите на свой сервер как root.
  2. Идти к /usr/local/directadmin/data/users. Из перечисленных пользователей перейдите к одному, связанному с доменом, который вы хотите изменить.
  3. Здесь есть httpd.confфайл. Сделайте с него бэкап:

    cp httpd.conf httpd.conf.back
    
  4. Теперь отредактируйте файл конфигурации в любом редакторе. Например, отредактируйте существующийopen_basedir к none. Не пытайтесь что-либо убирать, иначе у вас могут возникнуть простои. Сохраните файл после редактирования.

  5. Перезапустите веб-сервер Apache одним из следующих способов (используйте sudo если нужно):

    httpd -k graceful
    apachectl -k graceful
    apache2 -k graceful
    
  6. Если вы обнаружите какие-либо ошибки, замените основной файл конфигурации файлом резервной копии и перезапустите веб-сервер.

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

Надеюсь, это поможет!

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

Я обнаружил, что вам придется включить IP для своего сервера, особенно при использовании Cerber, в некоторых случаях он может подумать, что вы не загружаете .png, вместо этого вы загружаете файлы .js.

IP-адрес сервера должен быть внесен в белый список. Даже загрузчики в некоторых редких случаях.

Полезно знать, что в вашем базовом каталоге должна быть папка 755 tmp, на самом деле вам не нужна папка с именем tmp .: "Также помните / правильно отредактировал, как показано ниже:

      open_basedir = "/home/user/site.com/:/tmp"
upload_tmp_dir = /home/user/site.com/tmp

Лучший вариант для быстрой настройки - в Cpanel, где вы используете MultiPHP INI Editor, который вы можете сохранить, и оба файла .htaccess и php.ini будут обновлены, а настройки будут инициированы одновременно на сайте.

НЕ рекомендуется указывать baseir как «none», так как вы включаете корневые файлы, которые можно редактировать с помощью только одного редактора файлов в WordPress. Если это действительно возможно.

Я загрузил свой проект codeigniter на панель Directadmin. У меня такая же ошибка.

Потом меняю в настройках php.

open_basedir = session.save_path = ./temp/

Тогда это сработало для меня.

Для меня это потому, что я указал неправильный путь в каталоге tmp php.

Надеюсь это поможет

Проверьте файл \ httpdocs \ bootstrap \ cache \ config.php в plesk, чтобы увидеть, есть ли какие-либо нежелательные пути.

Просто поиск

open_basedir =

в php.ini и отключите его. Это самое простое решение для решения этой проблемы.

До изменений open_basedir =

После изменений ;open_basedir =

Ps - после изменений не забудьте перезагрузить сервер.

Наслаждаться;)

Другие вопросы по тегам