Основанный вопрос, я читаю это правильно?
Предупреждение: touch() [function.touch]: действует ограничение open_basedir. File() находится за пределами разрешенных путей: (/var/www/vhosts/site.com/httpdocs/) в /var/www/vhosts/site.com/httpdocs/Manuals/updater.php в строке 5 При загрузке вашего руководства произошла ошибка. Пожалуйста, нажмите кнопку "Назад" и попробуйте снова.
Я пытаюсь выяснить, почему, черт возьми, это не работает - в настоящее время я использую plesk, и он установлен по умолчанию, который должен работать, так как он находится в подкаталоге httpdocs...
есть идеи?
UPDATER.PHP
<?php
// $URL="manualframe.php";
$URL=$_GET["URL"];
// header( 'Location: '.$URL.'' ) ;
if (touch($URL)) {
echo 'loading!';
} else {
echo 'There was an error loading your Manual, please press the back button and try again.';
}
echo '<meta http-equiv="refresh" content="1;URL='.$URL.'">';
?>
2 ответа
Будет ли каталог Manuals символической ссылкой на каталог вне webroot случайно?
open_basedir
также действует на символические ссылки в пределах вашего разрешенного пути (путей).
См. Руководство по PHP для open_basedir для получения дополнительной информации, которая гласит:
Когда скрипт пытается открыть файл, например, с помощью fopen() или gzopen(), проверяется местоположение файла. Когда файл находится за пределами указанного дерева каталогов, PHP откажется его открывать. Все символические ссылки разрешены, поэтому избежать этого ограничения с помощью символической ссылки невозможно. Если файл не существует, символическая ссылка не может быть разрешена, а имя файла сравнивается с (разрешенным) open_basedir .
Похоже, PHP работает в безопасном режиме. Это ограничение означает, что вы не можете читать файлы вне вашего веб-корня. Это, вероятно, то, что пытается сделать Updater.php.