Предупреждение об отказе в доступе при отключении связи

Я пытаюсь удалить файл, выбранный с помощью раскрывающегося списка. Я получаю сообщение об ошибке «неопределенный индексный файл» и предупреждение об отказе в разрешении при отключении связи.

<?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.";
}
?>

person Neeraj kaushik    schedule 31.07.2015    source источник
comment
Имеет ли сервер права доступа к файлам? Кроме того, вы устанавливаете $dirpath с тем же значением, что и $dirname, почему бы не использовать повторно $dirpath?   -  person Hakim    schedule 31.07.2015


Ответы (2)


Обратите внимание, что ваш $dirpath заканчивается на /, а позже вы пытаетесь отменить связь:

unlink ($dirpath.'/'.$file_to_delete)

так что на самом деле получается что-то вроде этого (обратите внимание на двойную косую черту):

[...] myphp/project/userdir/neeraj//$file_to_delete [...]

Вы должны проверить права доступа к файлам, чтобы убедиться, что у скрипта есть право отменить связь между вашими файлами:
https://en.wikipedia.org/wiki/File_system_permissions

person violator667    schedule 02.08.2015

Я предполагаю, что вы получаете первую ошибку, потому что вы не упаковываете свой код для выполнения только при отправке формы. Измените второй раздел вашего кода на это:

<?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 может или не может получить доступ и удалить каталог, в котором вы храните файлы.

person Lelio Faieta    schedule 02.08.2015