8

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

4

5 回答 5

10

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

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

<?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 );
}
?> 
于 2010-02-05T05:18:18.170 回答
5

我建议这种方式,简单直接。

    $files = glob('your/folder/' . '*', GLOB_MARK);
    foreach($files as $file)
    {
        if (is_dir($file)) {
            self::deleteDir($file);
        } else {
            unlink($file);
        }
    }
于 2013-11-27T15:08:28.650 回答
0

您是否尝试过在目录中取消链接?

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

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

于 2010-02-05T05:19:52.950 回答
0

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

于 2010-02-05T05:20:31.917 回答
0

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
于 2018-06-09T09:09:40.780 回答