open_basedir – как установить для определенного каталога

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

Вы можете установить 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 – ; это разделитель, поэтому это должно работать, но я не могу проверить его лично.

Вы можете изменить open_basedir в php.ini, в вашем httpd.conf или во время выполнения.