scandir函数的PHP问题

scandir函数的PHP问题,php,filepath,dynamic-arrays,scandir,Php,Filepath,Dynamic Arrays,Scandir,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($

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]); 
}  
?>
警告:取消链接(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行

我想删除由“$arraydir[2]”表示的文件“ana.png”(该文件可在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]);

该文件位于
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;
        } 
    }  
?>


希望这能有所帮助。

实际上,如果运行代码,您将始终只取消数组索引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”的写入权限;您应该更改文件和目录权限。我建议您在windows 10上设置文件权限。当您第一次尝试删除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上设置文件权限时遵循这一点

取消链接错误的路径您只需指定整个路径而不仅仅是文件名您是否可以使用
要求“图像/”
澄清您想要实现的目标
require
用于包含更多的PHP代码,而不是设置目录上下文不确定是否需要
foreach
。如果要使用
foreach
,您可能还需要排除
目录。您的代码非常危险,因为您不会忽略“.”或“.”。如果您的代码实际工作,它将做的第一件事是尝试删除正在扫描的目录。它要做的第二件事是试图删除该目录的父目录。@GordonM不,因为OP只删除
$arraydir[2]
,我承认这也是相当危险的,但不完全是您所建议的您取消了一个不正确的路径的链接您只需指定整个路径而不仅仅是文件名您是否可以使用
require'images/'
澄清您想要实现的目标
require
用于包含更多的PHP代码,而不是设置目录上下文不确定是否需要
foreach
。如果要使用
foreach
,您可能还需要排除
目录。您的代码非常危险,因为您不会忽略“.”或“.”。如果您的代码实际工作,它将做的第一件事是尝试删除正在扫描的目录。它要做的第二件事是试图删除该目录的父目录。@GordonM不,因为OP只会删除
$arraydir[2]
,我承认这也是相当危险的,但不是你建议的那样。你说得对,但这会删除目录中的所有文件,不是吗?不仅仅是
ana.png
@riggsfully在将值“2”设置为“$arraydir[$key]”->设置为“$arraydir[2]”后,它会删除正确的文件。是的。但是你会一次又一次地删除同一个文件。这会导致不必要的运行时间。如果您只想删除“ana.png”,那么您可以使用
$arraydir[2]
,但请在后面放一个break语句。我给你们举了一个一般意义上的例子。我已经为您的解决方案编辑了我的代码。好吧,当满足条件时,另一页将调用此代码,它将仅擦除图像一次,从而避免其他问题。谢谢你所做的一切!你说得很好,但这会删除目录中的所有文件,不是吗?不仅仅是
ana.png
@riggsfully在将值“2”设置为“$arraydir[$key]”->设置为“$arraydir[2]”后,它会删除正确的文件。是的。但是你会一次又一次地删除同一个文件。这会导致不必要的运行时间。如果您只想删除“ana.png”,那么您可以使用
$arraydir[2]
,但请在后面放一个break语句。我给你们举了一个一般意义上的例子。我已经为您的解决方案编辑了我的代码。好吧,当满足条件时,另一页将调用此代码,它将仅擦除图像一次,从而避免其他问题。谢谢你所做的一切!谢谢你帮我修好