如何使用php删除文件夹中除一个文件以外的所有文件?
我有这个php代码来删除文件夹中的所有图像文件,但我需要保留example.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
$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]);
//}
}
}