【发布时间】:2011-01-13 09:27:42
【问题描述】:
我该怎么做? kohana 3有没有提供什么方法?
【问题讨论】:
-
它是一个PHP框架,虽然这个问题与它没有任何关系,重新标记。
标签: php directory delete-file
我该怎么做? kohana 3有没有提供什么方法?
【问题讨论】:
标签: php directory delete-file
要删除一个目录和所有这些内容,你必须编写一些递归删除函数——或者使用一个已经存在的函数。
您可以在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 );
}
?>
【讨论】:
glob 函数 (参见 php.net/glob ) 将返回所有匹配该模式的文件 -- 而* 将匹配所有文件,这意味着 glob 将返回$dir 指向的目录中所有文件的列表;; GLOB_MARK 表示“在返回的每个目录中添加一个斜杠”
rmdir( $dir ); 行
GLOB_NOSORT 以加快删除速度,因此它将是$files = glob( $dir . '*', GLOB_MARK | GLOB_NOSORT );
我建议这样,简单直接。
$files = glob('your/folder/' . '*', GLOB_MARK);
foreach($files as $file)
{
if (is_dir($file)) {
self::deleteDir($file);
} else {
unlink($file);
}
}
【讨论】:
你试过在目录中取消链接吗?
chdir("file");
foreach (glob("N*") as $filename )
{
unlink($filename);
}
这会删除从 N 开始的文件名
【讨论】:
我不确定 Kohana 3,但我会结合使用 DirectoryIterator() 和 unlink()。
【讨论】:
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
【讨论】: