Проблемы с PHP с функцией scandir - PullRequest
0 голосов
/ 02 ноября 2018

dirdel.php:

<?php
//The name of the folder.
$dir = 'images';
//Get a list of all of the file names in the folder.
$arraydir = scandir($dir, 2);
print_r($arraydir);

//Loop through the file list.
foreach ($arraydir as $key => $value) { 
unlink($arraydir[2]); 
}  
?>

Выводы массива:

Array ( [0] => . 
        [1] => .. 
        [2] => ana.png 
        [3] => ban.png 
        [4] => ing.png 
        [5] => maca.png 
        [6] => no.png 
        [7] => pret.png )

Предупреждение: unlink (ana.png): нет такого файла или каталога в C: \ phpdesktop- chrome-57.0-rc-php-7.1.3 \ www \ dirdel.php в строке 10

Чтобы исследовать ошибку, я также попробовал что-то вроде:

require 'images/';

Выход:

Предупреждение: требуется (C: \ phpdesktop-chrome-57.0-rc-php-7.1.3 \ www \ images): не удалось открыть поток: отказано в разрешении в C: \ phpdesktop-chrome-57.0-rc- php-7.1.3 \ www \ dirdel.php в строке 2

Я хочу удалить файл "ana.png", представленный: "$ arraydir [2]" (файл находится в www / images)

Я уже искал в нескольких местах, но не нашел ничего, что помогло бы мне решить эту проблему.

Есть ли какое-то решение для этого?

Альтернативы действительны, если они уважают структуру массивов:

Array ( [0] => . 
        [1] => .. 
        [2] => ana.png 
        [3] => ban.png 
        [4] => ing.png 
        [5] => maca.png 
        [6] => no.png 
        [7] => pret.png )

Спасибо за внимание.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

На самом деле, если вы запустите свой код, вы всегда отсоедините только индекс 2 вашего массива. Вы должны использовать переменные и ссылки, которые вы используете в цикле foreach. Я предлагаю вам попробовать приведенный ниже код:

<?php
    //The name of the folder.
    $dir = 'images';

    //Get a list of all of the file names in the folder.
    $arraydir = scandir($dir, 2);
    print_r($arraydir);

    //Loop through the file list.
    foreach ($arraydir as $key => $value) {
        if ($arraydir[$key] == 'ana.png' && file_exists($dir . DIRECTORY_SEPARATOR . $arraydir[$key])) {
            unlink($dir . DIRECTORY_SEPARATOR . $arraydir[$key]);
            break;
        } 
    }  
?>

Надеюсь, это поможет.

0 голосов
/ 02 ноября 2018

Когда вы впервые попытались удалить файл ana.png, используемый путь был относительно вашего текущего каталога, поэтому файл не был найден. Что привело к первой ошибке.

Чтобы решить эту проблему, вы должны либо дать абсолютный путь,

$prefix = 'C:\\phpdesktop-chrome-57.0-rc-php-7.1.3\\www\images\\';
$filename = $prefix . $arraydir[2];
unlink($filename)

или объедините имя файла с именем каталога $dir . '/' . $arraydir[2]

$dir = 'images'; /*Assuming your current directory is 'C:\phpdesktop-chrome-57.0-rc-php-7.1.3\www\'*/
unlink($dir . $arraydir[2]);

Что касается второй ошибки, похоже, у вас нет прав записи в папку 'C: \ phpdesktop-chrome-57.0-rc-php-7.1.3 \ www \ images'; Вы должны изменить файлы и права доступа к каталогу. Я бы предложил следовать этому учебнику о настройке прав доступа к файлам в Windows 10

.
0 голосов
/ 02 ноября 2018

Файл находится в папке images, но вы не добавляете его в параметр функции unlink().

Так что попробуйте вместо этого

unlink($dir . '/' . $arraydir[2]);
...