Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php删除文件夹中除一个文件以外的所有文件?_Php_Image_File - Fatal编程技术网

如何使用php删除文件夹中除一个文件以外的所有文件?

如何使用php删除文件夹中除一个文件以外的所有文件?,php,image,file,Php,Image,File,我有这个php代码来删除文件夹中的所有图像文件,但我需要保留example.php文件 我怎么能 $dir = @opendir('../result_image/'); while (false !== ($file = @readdir($dir))) { if ($file != '..' && $file != '.') { $upload[] = $file; } } $time_sec=@time(); for($i=0;$i

我有这个php代码来删除文件夹中的所有图像文件,但我需要保留example.php文件

我怎么能

$dir = @opendir('../result_image/');
while (false !== ($file = @readdir($dir)))
{
    if ($file != '..' && $file != '.')
    {
    $upload[] = $file;
    }
}

$time_sec=@time();
    for($i=0;$i<count($upload);$i++)
    {
    $time_file=@filemtime('../result_image/'.$upload[$i]);
    $time=$time_sec-$time_file;
if($time>9000)
    {
        //if ($upload[] = "disk_save.php") continue;
        @unlink('../result_image/'.$upload[$i]);
      }
   }
$dir=@opendir('../result\u image/);
while(false!==($file=@readdir($dir)))
{
如果($file!='..'&&&$file!=''.)
{
$upload[]=$file;
}
}
$time_sec=@time();
对于($i=0;$i9000)
{
//如果($upload[]=“disk_save.php”)继续;
@取消链接('../result_image/'.$upload[$i]);
}
}

我的问题有三个答案,所有答案都可以。但其中哪一个是最好的?此代码在用户每次上传图片时执行。

您可以通过在
取消链接之前添加一个简单的
if
条件来执行此操作,如下所示

//Your code here    
if($upload[$i] != 'example.php'){
    unlink('../result_image/'.$upload[$i]);
}

注意:在函数前面添加
@
不是一个好的做法。如果出现错误,请尝试克服所有错误。

分解上传中存储的每个值。我猜你有文件的全名:

$unwantedExt = array('php');
for($i=0;$i<count($upload);$i++) {
    list($fileName, $extension) = explode('.', $upload[$i]);
    if(!in_array($extension, $unwantedExt)) {
       unlink('../result_image/'.$upload[$i]);
    }
}
$unwantedex=array('php');
对于($i=0;$i我将按如下方式执行

$time_sec=time();
$excludeFiles = array('example.php','disk_save.php');
for($i=0;$i<count($upload);$i++)
{
    $time_file=filemtime('../result_image/'.$upload[$i]);
    $time=$time_sec-$time_file;
    if($time>9000)
    {
        try {
            if (!in_array($upload[$i], $excludeFiles))
                unlink('../result_image/'.$upload[$i]);
        } catch (Exception $e) {
            // Error handle here
        }
    }
}
$time_sec=time();
$excludeFiles=array('example.php','disk_save.php');
对于($i=0;$i9000)
{
试一试{
if(!in_数组($upload[$i],$excludeFiles))
取消链接('../result_image/'.$upload[$i]);
}捕获(例外$e){
//这里的错误句柄
}
}
}
您可以使用
glob()
迭代目标目录中的所有文件。此外,如果您只想删除(例如)
*.png
文件,您可以将扩展名添加到
glob()
调用以提高效率(同时确保只删除您提到的图像文件)



这段代码对我也适用,
在将另一个文件放入$upload[]之前,我将.php名称文件放入IF。如下所示:

$dir = opendir('../result_image/');
while (false !== ($file = readdir($dir)))
{
    if ($file != 'disk_save.php')
    {
    $upload[] = $file;
    }
}
$time_sec=time();
for($i=0;$i<count($upload);$i++)
{
$time_file=filemtime('../result_image/'.$upload[$i]);
$time=$time_sec-$time_file;
    if($time>9000)
    {
        //if($upload[$i] != 'disk_save.php'){
        unlink('../result_image/'.$upload[$i]);
        //}
    }
}
$dir=opendir('../result\u image/');
while(false!=($file=readdir($dir)))
{
如果($file!=“disk\u save.php”)
{
$upload[]=$file;
}
}
$time_sec=time();
对于($i=0;$i9000)
{
//if($upload[$i]!='disk\u save.php'){
取消链接('../result_image/'.$upload[$i]);
//}
}
}

为什么要取消(
@
)脚本中几乎所有的函数?是否所有要删除的图像都具有相同的扩展名?关于抑制函数调用的旁注:如果抑制大部分/所有调用,则会大大降低执行时间。亲爱的,我在这个文件夹中有disk_save.php。我不想在执行中删除此文件。@user3425550请定义ne best=)。所有答案都有效。在我看来,您应该定义将来哪个更易于维护,并适应您的需要。在
取消链接的情况下,请使用STFU操作符。您只需要检查文件是否真的被删除。这对我来说是最好的,因为我的文件夹中有一个.php文件。亲爱的Manibharathi,没有@在执行一段时间后,我有一些关于没有文件或没有文件的错误,例如文件已经被删除了?可以帮助我吗?@user3425550您可以简单地检查文件是否存在,如果(file_exists('example.php'){//unlink code}
,则按如下方式取消链接文件之前
$dir = opendir('../result_image/');
while (false !== ($file = readdir($dir)))
{
    if ($file != 'disk_save.php')
    {
    $upload[] = $file;
    }
}
$time_sec=time();
for($i=0;$i<count($upload);$i++)
{
$time_file=filemtime('../result_image/'.$upload[$i]);
$time=$time_sec-$time_file;
    if($time>9000)
    {
        //if($upload[$i] != 'disk_save.php'){
        unlink('../result_image/'.$upload[$i]);
        //}
    }
}