PHP - 仅在没有文件夹/文件的情况下才删除文件夹/文件

时间:2011-08-16 22:07:53

标签: php file unlink

$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 !!!干杯每个人!!

4 个答案:

答案 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)  
  }
}

http://php.net/manual/en/function.is-dir.php

http://www.php.net/manual/en/function.scandir.php

答案 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);
    }
}
?>