на основе их проблемы, я правильно это читаю?

Предупреждение: touch () [function.touch]: действует ограничение open_basedir. File () находится за пределами разрешенных путей: (/var/www/vhosts/site.com/httpdocs/) в /var/www/vhosts/site.com/httpdocs/Manuals/updater.php в строке 5 При загрузке руководства произошла ошибка. Нажмите кнопку "Назад" и повторите попытку.

Я пытаюсь понять, почему, черт возьми, это не работает - в настоящее время я использую plesk, и он установлен по умолчанию, который должен работать, поскольку он находится в подкаталоге httpdocs ...

Любые идеи?

ОБНОВЛЕНИЕ.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.'">';
?>

person NRGdallas    schedule 13.06.2012    source источник


Ответы (2)


Может ли каталог Manuals быть символической ссылкой на каталог за пределами корневого веб-каталога?

open_basedir также влияет на символические ссылки в пределах вашего разрешенного пути (ов).

Дополнительную информацию см. В руководстве PHP по open_basedir. , в котором говорится:

Когда сценарий пытается открыть файл, например, с помощью fopen () или gzopen (), проверяется местоположение файла. Когда файл находится за пределами указанного дерева каталогов, PHP откажется его открыть. Все символические ссылки разрешены, поэтому невозможно обойти это ограничение с помощью символической ссылки. Если файл не существует, то символическая ссылка не может быть разрешена, и имя файла сравнивается с (разрешенным) open_basedir.

person Rem.co    schedule 13.06.2012
comment
файл примера находится по адресу site.com/manuals/folder1/sample.pdf, здесь нет глупостей: P - person NRGdallas; 13.06.2012
comment
В таком случае не могли бы вы предоставить нам пример кода updater.php? (В частности, строка 5). Я неправильно прочитал сообщение об ошибке; Manuals / updater.php находится в пределах разрешенного пути, но файл, который вы пытаетесь touch, нет, поэтому, возможно, в вашем синтаксисе есть ошибка. (Вполне возможно, что проблема с абсолютным / относительным путем, например, когда вы пытаетесь touch('/folder1/sample.pdf') вместо touch('./folder1/sample.pdf') - person Rem.co; 13.06.2012
comment
не могу вставить код в комментарии, код добавлен в основной пост. в частности, я пробовал '/ folder1' './folder1' и даже просто 'folder1' - ничто. - person NRGdallas; 13.06.2012
comment
на что-то в настоящее время; похоже, что моя переменная get не отправляется правильно для URL-адреса, поэтому я думаю, что идея правильного пути - исправление и проверка, решена ли проблема. - person NRGdallas; 13.06.2012
comment
Решено, данные для получения отправлялись с неправильной переменной, и в URL-адресе все равно отсутствовала переменная - исправлены оба, изменены права доступа к файлам, проблема решена. спасибо за инициативу! - person NRGdallas; 13.06.2012
comment
Я протестировал ваш код и, похоже, он работает нормально (с срочным замечанием, что прямое использование неанитизированных переменных GET очень и очень опасно): http://localhost/test.php?URL=test/test.pdf действительно создает test.pdf if (чувствительный к регистру) (под) каталог test существует. - person Rem.co; 13.06.2012

Похоже, PHP работает в безопасном режиме. Это ограничение означает, что вы не можете читать какие-либо файлы за пределами корневого веб-сайта. Вероятно, это то, что пытается сделать updater.php.

person Cameron Martin    schedule 13.06.2012
comment
безопасный режим отключен для каждой панели plesk. все, что делает updater.php, - это берет файл из подпапки с руководствами, касается его и затем перенаправляет на него. - person NRGdallas; 13.06.2012