Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-仅当文件夹/文件中没有其他文件时才删除_Php_File_Unlink - Fatal编程技术网

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%确定它是否满足了您的要求-但它可能值得一提。我正在尝试使用您发布的代码,看起来很简单,但它不起作用,任何原因??我使用的确切代码都在我的原始版本中我在底部提问。谢谢。我正在尝试使用你发布的代码,看起来很简单,但它不起作用,任何原因??我使用的确切代码在它底部的原始问题中。谢谢。