【问题标题】:PHP delete the contents of a directoryPHP删除目录内容
【发布时间】:2011-01-13 09:27:42
【问题描述】:

我该怎么做? kohana 3有没有提供什么方法​​?

【问题讨论】:

  • 它是一个PHP框架,虽然这个问题与它没有任何关系,重新标记。

标签: php directory delete-file


【解决方案1】:

要删除一个目录和所有这些内容,你必须编写一些递归删除函数——或者使用一个已经存在的函数。

您可以在rmdir 的文档页面上的用户注释中找到一些示例;例如,这里是 2009 年 8 月的the one proposed by bcairns(引用)

<?php
// ensure $dir ends with a slash
function delTree($dir) {
    $files = glob( $dir . '*', GLOB_MARK );
    foreach( $files as $file ){
        if( substr( $file, -1 ) == '/' )
            delTree( $file );
        else
            unlink( $file );
    }
    rmdir( $dir );
}
?> 

【讨论】:

  • $files = glob( $dir . '*', GLOB_MARK ); -> 请解释这一行。谢谢。
  • glob 函数 (参见 php.net/glob 将返回所有匹配该模式的文件 -- 而* 将匹配所有文件,这意味着 glob 将返回$dir 指向的目录中所有文件的列表;; GLOB_MARK 表示“在返回的每个目录中添加一个斜杠
  • 如果您只想删除文件夹的内容 - 而不是文件夹本身 - 删除 rmdir( $dir );
  • 另外,您可以添加GLOB_NOSORT 以加快删除速度,因此它将是$files = glob( $dir . '*', GLOB_MARK | GLOB_NOSORT );
【解决方案2】:

我建议这样,简单直接。

    $files = glob('your/folder/' . '*', GLOB_MARK);
    foreach($files as $file)
    {
        if (is_dir($file)) {
            self::deleteDir($file);
        } else {
            unlink($file);
        }
    }

【讨论】:

    【解决方案3】:

    你试过在目录中取消链接吗?

          chdir("file");
       foreach (glob("N*") as $filename )
          {
            unlink($filename);
          }
    

    这会删除从 N 开始的文件名

    【讨论】:

      【解决方案4】:

      我不确定 Kohana 3,但我会结合使用 DirectoryIterator()unlink()

      【讨论】:

        【解决方案5】:

        Pascal 的解决方案不适用于所有操作系统。因此,我创建了另一个解决方案。该代码是静态类库的一部分并且是静态的。
        它会删除给定父目录中的所有文件和目录。
        该函数对子目录是递归的,并且可以选择不删除父目录($keepFirst)。
        如果父目录不存在或不是目录,则返回'null'。如果删除成功,则返回“true”。

        /**
        * Deletes all files in the given directory, also the subdirectories.
        * @param string  $dir       Name of the directory
        * @param boolean $keepFirst [Optional] indicator for first directory.
        * @return null | true
        */
        public static function deltree( $dir, $keepFirst = false ) {
          // First check if it is a directory.
          if (! is_dir( $dir ) ) {
             return null;
          }
        
          if ($handle = opendir( $dir ) ) {
             while (false !== ( $fileName = readdir($handle) ) ) {
                // Skips the hidden directory files.
                if ($fileName == "." || $fileName == "..") {
                   continue;
                }
        
                $dpFile = sprintf( "%s/%s", $dir, $fileName );
        
                if (is_dir( $dpFile ) ) {
                   self::deltree( $dpFile );
                } else {
                   unlink( $dpFile );
                }
             }  // while
        
             // Directory removal, optional not the parent directory.
             if (! $keepFirst ) {
                rmdir( $dir );
             }
          }  // if
          return true;
        }  // deltree
        

        【讨论】:

        • Pascal 的解决方案没有涵盖哪些操作系统?
        • 谢谢,错过了
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多