Основанный вопрос, я читаю это правильно?

Предупреждение: 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.

Другие вопросы по тегам