Я пытаюсь удалить файл, выбранный с помощью раскрывающегося списка. Я получаю сообщение об ошибке «неопределенный индекс« файл »» и предупреждение об отказе в разрешении при отмене ссылки.
<?php
$dirname = $_SERVER['DOCUMENT_ROOT']."myphp/project/userdir/neeraj/";
$dir = opendir($dirname);
echo '<form action="delete.php" method="get">';
echo '<select name="file2">';
while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != ".."))
{
echo "<option value=".$file.">$file</option>";
}
}
echo '</select>';
echo '<input type="submit" value="Delete" class="submit" />';
echo '</form>';?>
<?php
$dirpath = $_SERVER['DOCUMENT_ROOT']."myphp/project/userdir/neeraj/";
$file_to_delete = $_GET['file2'];
if ( unlink ($dirpath.'/'.$file_to_delete) ) {
echo $file_to_delete . " deleted.";
} else {
echo "Error.";
}
?>
Обратите внимание, что ваш $dirpath
заканчивается /
и позже вы пытаетесь удалить связь:
unlink ($dirpath.'/'.$file_to_delete)
так что на самом деле получается что-то вроде этого (обратите внимание на двойной слеш):
[...] myphp/project/userdir/neeraj//$file_to_delete [...]
Вы должны проверить права доступа к файлам, чтобы убедиться, что скрипт имеет право отсоединять ваши файлы:
https://en.wikipedia.org/wiki/File_system_permissions
Я думаю, вы получите первую ошибку, потому что вы не переносите код, который будет выполняться только при отправке формы. Измените второй раздел вашего кода на это:
<?php
if(isset($_GET['file2'])){ //i have posted my form
$dirpath = $_SERVER['DOCUMENT_ROOT']."myphp/project/userdir/neeraj/";
$file_to_delete = $_GET['file2'];
if ( unlink ($dirpath.'/'.$file_to_delete) ) {
echo $file_to_delete . " deleted.";
} else {
echo "Error.";
}
}
?>
Другая ошибка связана с тем, что пользователь apache может иметь или не иметь доступ и удалять в каталоге, где вы храните файлы.