PHP scandir 功能问题

PHP problems with scandir function

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 )

Warning: unlink(ana.png): No such file or directory in C:\phpdesktop- chrome-57.0-rc-php-7.1.3\www\dirdel.php on line 10

为了调查错误,我还尝试了类似的方法:

require 'images/';

输出:

Warning: require(C:\phpdesktop-chrome-57.0-rc-php-7.1.3\www\images): failed to open stream: Permission denied in C:\phpdesktop-chrome-57.0-rc- php-7.1.3\www\dirdel.php on line 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 )

感谢您的关注。

该文件位于 images 文件夹中,但您没有将其添加到 unlink() 函数参数中。

所以试试这个

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

实际上,如果您 运行 您的代码,您将始终只取消链接数组的索引 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;
        } 
    }  
?>

希望对您有所帮助。

当您第一次尝试删除文件 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';您应该更改文件和目录权限。我建议遵循此 tutorial 关于在 windows 10

上设置文件权限