У меня проблемы с удалением файла из каталога более высокого уровня, я нашел этот пост и попробовал, но не повезло....:
gotdalife в gmail точка ком 25 сентября 2008 02:04
Для всех, у кого была проблема с ошибкой отказа в правах, это иногда возникает, когда вы пытаетесь удалить файл, который находится в папке выше в иерархии, в ваш рабочий каталог (т.е. при попытке удалить путь, который начинается с «../» ).
Таким образом, чтобы обойти эту проблему, вы можете использовать chdir(), чтобы изменить рабочий каталог на папку, в которой находится файл, который вы хотите отменить.
<?php
> $old = getcwd(); // Save the current directory
> chdir($path_to_file);
> unlink($filename);
> chdir($old); // Restore the old working directory ?>
вот код, который у меня сейчас есть:
session_start();
if (!isset($_SESSION['agent']) OR ($_SESSION['agent'] !=md5($_SERVER['HTTP_USER_AGENT']))){
require_once ('includes/login_functions.inc.php');
$url = absolute_url();
header("Location: $url");
exit();
}
$folder = $_GET['folder'];
$filename = $_GET['name'];
$path = "../gallery/photos/$folder";
if (isset($_POST['submitted'])) {
if ($_POST['sure'] == 'Yes') {
$old = getcwd(); // Save the current directory
chdir($path);
unlink($filename);
chdir($old); // Restore the old working directory
}
else{
echo '<p>The photo has NOT been deleted.</p>';
}
}
Я получаю сообщение об ошибке:
Предупреждение: unlink() [function.unlink]: нет ошибок в J:\xampp\htdocs\bunker\admin\delete_file.php в строке 37
строка 37:
unlink($filename);
кто-нибудь может увидеть, что я сделал неправильно?
chdir
и запускunlink
...? По крайней мере, сделайте некоторую сенсибилизацию, чтобы предотвратитьdelete_file.php?folder=../../../../../etc&file=passwd
... (разрешения, вероятно, предотвратят это, но обязательно будут файлы, которые он может удалить, которые, по крайней мере, так же плохи для вас)... - person ircmaxell   schedule 15.11.2010