到目前为止,我有这个:
<?php
$path = "files/";
$files = glob("" . $path . "{*.jpg, *.gif, *.png}", GLOB_BRACE);
$i = 0;
foreach($files as $file)
{
$delete = unlink($file);
if($delete)
{
echo $file . " deleted!<br />";
$i - 1;
}
else
{
echo $file . " could not be deleted...<br />";
$i + 1;
}
}
if($i == 0)
{
if(is_dir($path))
{
$remove = rmdir($path);
if($remove)
{
echo "directory was deleted</br />";
}
else
{
echo "directory could not be deleted</br />";
}
}
else
{
echo "not a valid directory<br />";
}
}
else
{
echo "there are some files in the folder";
echo $i;
}
?>
删除每个文件,这很棒。但是,它不会删除目录。这有什么问题?
答案 0 :(得分:2)
您正在尝试删除foreach循环中的目录,该目录将删除该目录中的文件。
我首先尝试删除所有文件然后删除目录,否则它将不为空且无法删除。
此外,$ i-counter将无法在目录为空时告诉您:想象您的第一个文件将被删除,然后$ i = -1。如果现在你的第二个文件没有删除,你的$ i = 0 ...这是删除目录的条件,即使它不是空的,因为至少你的第二个文件仍然存在。
答案 1 :(得分:2)
你需要将rmdir拉出循环。类似的东西:
$numfailed = 0;
foreach($files as $file)
{
$delete = unlink($file);
if($delete)
{
echo $file . " deleted!<br />";
}
else
{
echo $file . " could not be deleted...<br />";
$numfailed++;
}
}
if($numfailed == 0)
{
if(is_dir($path))
{
$remove = rmdir($path);
if($remove)
{
echo "directory was deleted</br />";
}
else
{
echo "directory could not be deleted</br />";
}
}
else
{
echo "not a valid directory<br />";
}
}
else
{
echo "there are still files in the folder, failed to remove $numfailed";
}
答案 2 :(得分:1)
rmdir删除一个目录,但前提是它是空的。在删除目录之前,您必须删除每个文件(以及每个子目录及其文件)。
答案 3 :(得分:1)
可能是权限。
由于您只删除某些特定文件类型,目录中可能还有其他文件没有删除权限,因此您无法删除该文件夹。
在尝试使用rmdir
命令之前,请尝试检查文件夹是否为空。