$value
可以=语言文件的文件夹结构。示例:languages / english.php
$value
也可以=文件名。示例:english.php
所以我需要获取$value
所在的当前文件夹,并且只有在该目录中没有其他文件/文件夹时才删除该文件夹(删除实际文件后,因为我已经在,当然)。
foreach($module['languages'] as $lang => $langFile)
{
foreach ($langFile as $type => $value)
{
@unlink($module_path . '/' . $value);
// Now I need to delete the folder ONLY if there are no other directories inside the folder where it is currently at.
// And ONLY if there are NO OTHER files within that folder also.
}
}
我该怎么做?并且想知道是否可以在不使用while循环的情况下完成此操作,因为while
循环中的foreach
循环可能需要一些时间,并且需要尽可能快。
仅仅是FYI,永远不应该删除$ module_path。所以如果$value = english.php
,它永远不应该删除$ module_path。当然,那里总会有另一个文件,所以检查这个是没有必要的,但不会受到任何影响。
谢谢你们:)
修改
好的,现在我在这里使用此代码并且它无法正常工作,它不会删除文件夹或文件,我也没有收到任何错误...所以不确定这里的问题是什么:
foreach($module['languages'] as $lang => $langFile)
{
foreach ($langFile as $type => $value)
{
if (@unlink($module_path . '/' . $value))
@rmdir(dirname($module_path . '/' . $value));
}
}
NEVERMIND,这是一个CHARM !!!干杯每个人!!
答案 0 :(得分:5)
最简单的方法是尝试使用rmdir
。如果文件夹不为空,则不删除该文件夹
rmdir($module_path);
您也可以通过
检查文件夹为空if(count(glob($module_path.'*'))<3)//delete
2表示.
和..
UPD :正如我所评论的那样,你应该用dirname替换$ module_path($ module_path。'。'。$ value);
答案 1 :(得分:1)
由于你关心的目录可能是$value
的一部分,你需要使用dirname
来确定父目录是什么,你不能只假设它是{{1} }。
$module_path
答案 2 :(得分:0)
if (is_file($value)) {
unlink($value);
} else if (is_dir($value)) {
if (count(scandir($value)) == 2) }
unlink($value)
}
}
答案 3 :(得分:0)
下面的代码将采用路径,检查它是否是文件(即不是目录)。如果它是一个文件,它将提取目录名,然后删除文件,然后迭代目录并计算其中的文件,如果文件为零,它将删除目录。
代码是一个示例,应该可以使用,但是权限和环境设置可能会导致它无法正常工作。
<?php
if(!is_dir ( string $filename )){ //if it is a file
$fileDir = dirname ( $filename );
if ($handle = opendir($fileDir)) {
echo "Directory handle: $handle\n";
echo "Files:\n";
$numFiles=0;
//delete the file
unlink($myFile);
//Loop the dir and count the file in it
while (false !== ($file = readdir($handle))) {
$numFiles = $numFiles + 1;
}
if($numFiles == 0) {
//delete the dir
rmdir($fileDir);
}
closedir($handle);
}
}
?>