Действует ограничение 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 и отредактируйте ее правильно...
Для Plesk вы можете изменить или установить настройки каталога openbase через панель
Отредактируйте файл 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, выполните следующие действия:
- Перейдите на страницу входа в DirectAdmin. Обычно это порт 2222.
- Войдите как администратор. Его имя пользователя
admin
по умолчанию. - В "Уровне доступа" на правой панели убедитесь, что вы находитесь на "Уровне администратора". Если нет, замените его.
- В разделе "Дополнительные функции" щелкните "Пользовательские конфигурации HTTPD".
- Выберите домен, который хотите изменить.
Введите конфигурации, которые вы хотите изменить, в текстовом поле вверху страницы. Вам следует рассмотреть существующий файл конфигурации и изменить значения на его основе. Например, если вы видите, что
open_basedir
устанавливается внутри<Directory>
, возможно, вам следует окружить свое изменение связанными<Directory>
тег:<Directory "/path/to/directory"> php_admin_value open_basedir none </Directory>
После внесения необходимых изменений нажмите кнопку "Сохранить".
- Теперь вы должны увидеть свои изменения, сохраненные в файле конфигурации, если они были действительными.
Однако есть и другой способ редактирования файла конфигурации:
Внимание: будьте осторожны и выполняйте следующие действия на свой страх и риск, так как вы можете столкнуться с ошибками или это может привести к простою. Рекомендуемый способ - предыдущий, поскольку он предотвращает неправильное изменение файла конфигурации и показывает ошибку.
- Войдите на свой сервер как root.
- Идти к
/usr/local/directadmin/data/users
. Из перечисленных пользователей перейдите к одному, связанному с доменом, который вы хотите изменить. Здесь есть
httpd.conf
файл. Сделайте с него бэкап:cp httpd.conf httpd.conf.back
Теперь отредактируйте файл конфигурации в любом редакторе. Например, отредактируйте существующий
open_basedir
кnone
. Не пытайтесь что-либо убирать, иначе у вас могут возникнуть простои. Сохраните файл после редактирования.Перезапустите веб-сервер Apache одним из следующих способов (используйте
sudo
если нужно):httpd -k graceful apachectl -k graceful apache2 -k graceful
Если вы обнаружите какие-либо ошибки, замените основной файл конфигурации файлом резервной копии и перезапустите веб-сервер.
Опять же, первое решение является предпочтительным, и вам не следует пробовать второй метод в первый раз. Как указано в предупреждении, преимущество первого способа состоит в том, что он предотвращает сохранение плохо настроенных файлов.
Надеюсь, это поможет!
Поскольку большинство не находят решения, решения для 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. Если это действительно возможно.
Для меня это потому, что я указал неправильный путь в каталоге tmp php.
Надеюсь это поможет
Проверьте файл \ httpdocs \ bootstrap \ cache \ config.php в plesk, чтобы увидеть, есть ли какие-либо нежелательные пути.
Просто поиск
open_basedir =
в php.ini и отключите его. Это самое простое решение для решения этой проблемы.
До изменений open_basedir =
После изменений ;open_basedir =
Ps - после изменений не забудьте перезагрузить сервер.
Наслаждаться;)