Почему realpath() работает только с определенными папками?
Я использую PHP realpath()
функция, и хочу знать, почему я получаю следующий вывод:
bool(false)
string(48) "/var/www/vhosts/website.co.uk/httpdocs"
bool(false)
string(48) "/var/www/vhosts/website.co.uk/httpdocs"
при запуске этого скрипта:
<?php
error_reporting(-1);
header('content-type: text/plain');
var_dump(realpath('/var/www/vhosts/website.co.uk/application'));
var_dump(realpath('/var/www/vhosts/website.co.uk/httpdocs'));
var_dump(realpath(dirname(__FILE__) . '/../application'));
var_dump(realpath(dirname(__FILE__) . '/../httpdocs'));
exit;
с этими правами доступа к файлам:
drwxr-x--- 5 username psaserv 4096 Jul 16 08:22 application
drwxr-x--- 10 username psaserv 4096 Jul 16 13:34 httpdocs
Замечания:
- Это система Plesk
- Скрипт работает как
apache
пользователь apache
пользователь является частьюpsaserv
группа
1 ответ
Ограничения Plesk и openbase_dir
Если plesk не изменился за последние несколько лет - он устанавливает ограничения open_basedir, так что вы можете получить доступ только к httpdocs
папка:
Настройки open_basedir по умолчанию дают вам возможность писать в 2 местоположения для каждого сайта. Там не должно быть никаких оснований для записи в любую другую папку. [...]
- / TMP
- /var/www/vhosts/domain.com/httpdocs
Таким образом, если запрос пытается прочитать / записать в любом другом месте - он не сможет это сделать, следовательно, realpath
вернет false для любого места за пределами httpdocs
папка.
Если вы хотите увидеть скрипт, на который есть ссылка в ссылочном сообщении на форуме, его можно переместить и найти здесь: unplesk.