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


88

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

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

18
Вы приняли нерабочий ответ.
— sjas

Ответы:


-22

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

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

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

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

2
@Nikesh Это дало мне ошибку 500 после того, как я бросил его в мое .htaccces и изменил пути к: /my/cutsom/dir/. Не уверен, почему подумал.
— hitautodestruct

79
Круто, 12 голосов за неправильный ответ. Вы не можете использовать php_admin_valueв .htaccessфайлах . Вы не можете использовать DirectoryMatch в файлах .htaccess . (Какие были бы меры безопасности, open_basedirесли бы его можно было просто отключить?)
— Альваро Гонсалес

1
@eoinoc - Прокрутите вниз и посмотрите, например, ответ Андрея. Или отредактируйте глобальный файл php.ini.
— Álvaro González

19
ВЫ НЕ ЗАПОЛНЯЙТЕ ЭТО В СВОЙ HTACCESS! НО СКОЛЬКО В ВАШЕМ ФАЙЛЕ КОНФИГУРАЦИИ APACHE.
— tfont

8
Включение корневого каталога в open_basedir полностью лишает цели open_basedir. Это решение «работает» только в том смысле, что фактически снимает ограничение.
— Мартин

114

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

введите описание изображения здесь введите описание изображения здесь


1
@yogihosting после этого у меня возникла ошибка - Невозможно найти указанную вами модель: Home_model
— Heemanshu Bhalla

1
Немного поздно, но есть ли способ сделать это для всех сайтов plesk? Я установил значение none в глобальном php.ini для версии, которую используют сайты: gyazo.com/dfffbe7f9b3a20ede97da72f1ddfc777 Но они все равно получают ошибку.
— Мэтт Коули,

@MattCowley, вы должны сделать это для каждого сайта, размещенного в панели plesk.
— yogihosting

1
Очень полезный ответ, моя проблема решена Недурно :)
— мухаммаданиш

1
Спасибо за это решение! Это идеально подходит для меня на виртуальном хостинге!
— Smilefounder

38

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


У меня сработала установка «нет» - тоже с использованием интерфейса Plesk.
— diggersworld

8
Я нашел open_basedirконфигурацию в своем php.ini. (Arch Linux на Raspberry Pi с php 5)
— Деннис ван дер Шагт,

2
Также нашел его в моем php.ini (также Arch). Просто закомментируйте строку, чтобы добиться того же эффекта, что и этот ответ.
— Бен Элгар

@BenElgar, просто комментируя строку, в которой упоминались работы, я просто спрашиваю, есть ли там риск
— mwangaben

6

Если вы используете это с 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


Это единственное решение, которое указывает на несколько конкретных путей вместо того, чтобы полностью пропустить безопасность.
— mvreijn 03

5

Для меня проблема заключалась в неправильных / отсутствующих значениях конфигурации для сервера 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

2

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


Он использует абсолютный путь. Это работает для всех пользователей, кроме этого.
— Webnet,

2

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

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

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

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


2

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

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


какое значение вы установили? /[... ]/public_html/wp-content/uploads?
— brett

1

Если используется 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 откажется получить к нему доступ.


0

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

Если вы сами администрируете сервер Windows и имеете доступ, попробуйте СНАЧАЛА:

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

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

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

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

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


0

В дополнение к ответу @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. Если вы обнаружите какие-либо ошибки, замените основной файл конфигурации файлом резервной копии и перезапустите веб-сервер.

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

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


0

Я использую 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/

-3

Просто ищи

open_basedir =

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

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

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

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

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


3
не делайте этого ... безопасность важна, хотите верьте, хотите нет . :) Время читать документацию по вашим инструментам: php.net/manual/en/ini.core.php#ini.open-basedir
— Адам Ленда
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.