如何使用PHP删除内容的文件夹
我需要使用PHP删除包含内容的文件夹。 rmdir()
和unlink()
删除空文件夹,但不能删除具有内容的文件夹。
此function将允许您删除任何文件夹(只要它是可写的),它是文件和子目录。
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/
小心点!!!
这里有一个脚本,可以完成你所需要的function:
/** * 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得到它,它的工作原理。
您将不得不recursion删除所有文件。 在rmdir
手册页的注释中有很多示例函数:
PHP中没有单个函数可以实现这个function,你必须用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 ); } ?>
你总是可以作弊并执行shell_exec("rm -rf /path/to/folder");
也许更好的方法是使用rm
(如果你在linux下)。 它会像这样( $root
应始终设置到您的TMP directory
以防止删除重要的文件!):
function remove($dir) { $root = $_SERVER['DOCUMENT_ROOT'].'/tmp/'; if (is_dir($root.$dir)) { exec('rm -rf '.$root.$dir); } }