PHP-仅当文件夹/文件中没有其他文件时才删除
PHP-仅当文件夹/文件中没有其他文件时才删除,php,file,unlink,Php,File,Unlink,$valuecan=语言文件的文件夹结构。示例:languages/english.php $value还可以=文件名。示例:english.php 因此,我需要获取$value所在的当前文件夹,并且仅当该目录中没有其他文件/文件夹时才删除该文件夹(当然,在删除实际文件之后,我已经这样做了) 我该怎么做??想知道这是否可以不用while循环来完成,因为foreach循环中的while循环可能需要一些时间,并且需要尽快完成 仅供参考,$module_路径永远不应该被删除。因此,如果$value=e
$value
can=语言文件的文件夹结构。示例:languages/english.php
$value
还可以=文件名。示例:english.php
因此,我需要获取$value
所在的当前文件夹,并且仅当该目录中没有其他文件/文件夹时才删除该文件夹(当然,在删除实际文件之后,我已经这样做了)
我该怎么做??想知道这是否可以不用while循环来完成,因为foreach
循环中的while
循环可能需要一些时间,并且需要尽快完成
仅供参考,$module_路径永远不应该被删除。因此,如果$value=english.php
,它就不应该删除$module\u路径。当然,其中总会有另一个文件,所以检查这一点是不必要的,但无论如何都不会有什么坏处
谢谢大家:)
编辑
好的,现在我在这里使用这个代码,它不工作,它不删除文件夹或文件,我也没有得到任何错误。。。因此,不确定问题出在哪里:
foreach($module['languages'] as $lang => $langFile)
{
foreach ($langFile as $type => $value)
{
if (@unlink($module_path . '/' . $value))
@rmdir(dirname($module_path . '/' . $value));
}
}
没关系,这是一种魅力!!!为大家干杯 最简单的方法是尝试使用
rmdir
。如果文件夹不为空,则不删除该文件夹
rmdir($module_path);
您还可以通过检查文件夹是否为空
if(count(glob($module_path.'*'))<3)//delete
if(count(glob($module_path.*'))最简单的方法是尝试使用rmdir
。如果文件夹不为空,则不会删除它
rmdir($module_path);
您还可以通过检查文件夹是否为空
if(count(glob($module_path.'*'))<3)//delete
if(count(glob($module_path.*')由于您关心的目录可能是$value
的一部分,您需要使用dirname
来确定父目录是什么,您不能仅仅假设它是$module_path
$file_path = $module_path . '/' . $value;
if (@unlink($file_path)) {
@rmdir(dirname($file_path));
}
由于您关心的目录可能是$value
的一部分,因此需要使用dirname
来确定父目录是什么,您不能仅仅假设它是$module\u path
$file_path = $module_path . '/' . $value;
if (@unlink($file_path)) {
@rmdir(dirname($file_path));
}
下面的代码将采用路径,检查它是否是文件(即不是目录)。如果它是文件,它将提取目录名,然后删除文件,然后迭代目录并计算其中的文件,如果文件为零,它将删除目录
代码就是一个例子,应该可以工作,但是特权和环境设置可能会导致它无法工作
<?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);
}
}
?>
下面的代码将采用路径,检查它是否是文件(即不是目录)。如果它是文件,它将提取目录名,然后删除文件,然后迭代目录并计算其中的文件,如果文件为零,它将删除目录
代码就是一个例子,应该可以工作,但是特权和环境设置可能会导致它无法工作
<?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);
}
}
?>
WOW,知道这一点太好了。不知道rmdir
必须有一个空文件夹才能删除它。太好了!!!我用我用于此的代码更新了它,但它不起作用,有人知道为什么吗?哇,知道这一点太好了。不知道rmdir
必须有一个空文件夹才能删除它。好极了!!!我用我正在使用的代码更新了它,但它不起作用,有人知道为什么吗?(也可以在Fabien的博客上看到这一点)使查找和遍历目录和文件变得非常容易。对于那个特定的情况,这可能是一种过分的做法,我不能100%确定它是否符合您的要求-但它可能值得一提。(另请参见Fabien的博客)使查找和遍历目录和文件变得非常容易。对于这种特定情况,这可能是一种过分的做法,我不能100%确定它是否满足了您的要求-但它可能值得一提。我正在尝试使用您发布的代码,看起来很简单,但它不起作用,任何原因??我使用的确切代码都在我的原始版本中我在底部提问。谢谢。我正在尝试使用你发布的代码,看起来很简单,但它不起作用,任何原因??我使用的确切代码在它底部的原始问题中。谢谢。