Как установить для конкретной директории open_basedir

У меня есть каталог /htdocs/unsecured, и я хочу ограничить все, что находится в этом каталоге или его подкаталогах, от доступа к чему-либо за пределами этого каталога. Где и как установить open_basedir только для этого каталога?

Ответ 1

Вы можете установить open_basedir в свой конфигурационный файл Apache, php.ini или в файл .htaccess.

Обычно я устанавливаю это в файле конфигурации apache, например, /etc/httpd/conf/httpd.conf.

У вас будет структура каталогов для вашего текущего домена/виртуального хоста, и вы можете добавить строку прямо там:

<VirtualHost 123.123.123.123:80>
    <Directory /htdocs/unsecured>
        php_admin_value open_basedir "C:/htdocs/unsecured"
    </Directory>
</VirtualHost>

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

В php.ini вы можете сделать это на гораздо более общем уровне (и он будет применяться ко всем доменам вашего сервера) с помощью

open_basedir = "/htdocs/unsecured"

В .htaccess вы должны иметь возможность использовать следующее (хотя я еще не тестировал):

php_value open_basedir "/htdocs/unsecured"

EDIT (путь к Windows)
За комментарий вы запускаете xammp в Windows (и не используете виртуальные хосты). С этой информацией я бы предложил разместить ваше правило open_basedir в вашем файле php.ini. Это должно (надеюсь) работать для вас:

open_basedir = "C:\xampp\htdocs\unsecured"

В linux a : является разделителем полей. В Windows ; является разделителем, поэтому это должно работать, но я не могу проверить его лично.