这个问题已经在这里有一个答案:
- 删除目录,在它的文件? 31个回答
我需要删除的文件夹使用PHP内容。 rmdir()
和unlink()
删除空文件夹,但不能删除具有文件夹的内容。
这个问题已经在这里有一个答案:
我需要删除的文件夹使用PHP内容。 rmdir()
和unlink()
删除空文件夹,但不能删除具有文件夹的内容。
该功能将允许你删除任何文件夹(只要它是可写的),它的文件和子目录。
function Delete($path)
{
if (is_dir($path) === true)
{
$files = array_diff(scandir($path), array('.', '..'));
foreach ($files as $file)
{
Delete(realpath($path) . '/' . $file);
}
return rmdir($path);
}
else if (is_file($path) === true)
{
return unlink($path);
}
return false;
}
或不使用递归RecursiveDirectoryIterator
:
function Delete($path)
{
if (is_dir($path) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file)
{
if (in_array($file->getBasename(), array('.', '..')) !== true)
{
if ($file->isDir() === true)
{
rmdir($file->getPathName());
}
else if (($file->isFile() === true) || ($file->isLink() === true))
{
unlink($file->getPathname());
}
}
}
return rmdir($path);
}
else if ((is_file($path) === true) || (is_link($path) === true))
{
return unlink($path);
}
return false;
}
你需要周围的文件夹的内容(包括所有子文件夹的内容)环和第一删除它们。
这里有一个例子: http://lixlpixel.org/recursive_function/php/recursive_directory_delete/
要小心它!
这里有一个脚本,将做什么您需要:
/**
* Recursively delete a directory
*
* @param string $dir Directory name
* @param boolean $deleteRootToo Delete specified top-level directory as well
*/
function unlinkRecursive($dir, $deleteRootToo)
{
if(!$dh = @opendir($dir))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if (!@unlink($dir . '/' . $obj))
{
unlinkRecursive($dir.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir);
}
return;
}
我从php.net得到它和它的作品。
没有单一的功能建设成PHP,将允许这一点,你必须写自己与命令rmdir及取消。
一个例子(从评论采取php.net文档 ):
<?
// 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 );
}
?>
你将不得不递归删除所有文件。 有在的意见很多功能。例如rmdir
手册页:
http://www.php.net/rmdir
你总是可以欺骗,并做shell_exec("rm -rf /path/to/folder");