Ita*_*vka 123 php recursion delete-directory
如何在PHP中删除目录及其全部内容(文件和子目录)?
Art*_*cto 191
您是否尝试过手册页中的第一个注释rmdir?
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir."/".$object) && !is_link($dir."/".$object))
rrmdir($dir."/".$object);
else
unlink($dir."/".$object);
}
}
rmdir($dir);
}
}
Run Code Online (Sandbox Code Playgroud)
sal*_*the 110
在Pixel Developer的评论基础上,使用SPL的片段可能如下所示:
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
rmdir($dir);
Run Code Online (Sandbox Code Playgroud)
注意:它没有进行健全性检查,并使用PHP 5.3.0中的FilesystemIterator引入的SKIP_DOTS标志.当然,$todo可能是if/ else.重要的是,CHILD_FIRST它用于在父(文件夹)之前首先迭代子(文件).
Lik*_*iko 16
删除路径中的所有文件和文件夹.
function recurseRmdir($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? recurseRmdir("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
Run Code Online (Sandbox Code Playgroud)
ank*_*nfo 13
对于*nix,您可以使用shell_execfor rm -R或DEL /S folder_namefor Windows.
还有另一个带有更多示例的线程: PHP的递归删除目录函数?
如果您使用Yii,那么您可以将其留在框架中:
CFileHelper::removeDirectory($my_directory);
Run Code Online (Sandbox Code Playgroud)
<?php
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use SplFileInfo;
# http://stackoverflow.com/a/3352564/283851
# https://gist.github.com/XzaR90/48c6b615be12fa765898
# Forked from https://gist.github.com/mindplay-dk/a4aad91f5a4f1283a5e2
/**
* Recursively delete a directory and all of it's contents - e.g.the equivalent of `rm -r` on the command-line.
* Consistent with `rmdir()` and `unlink()`, an E_WARNING level error will be generated on failure.
*
* @param string $source absolute path to directory or file to delete.
* @param bool $removeOnlyChildren set to true will only remove content inside directory.
*
* @return bool true on success; false on failure
*/
function rrmdir($source, $removeOnlyChildren = false)
{
if(empty($source) || file_exists($source) === false)
{
return false;
}
if(is_file($source) || is_link($source))
{
return unlink($source);
}
$files = new RecursiveIteratorIterator
(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
//$fileinfo as SplFileInfo
foreach($files as $fileinfo)
{
if($fileinfo->isDir())
{
if(rrmdir($fileinfo->getRealPath()) === false)
{
return false;
}
}
else
{
if(unlink($fileinfo->getRealPath()) === false)
{
return false;
}
}
}
if($removeOnlyChildren === false)
{
return rmdir($source);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108437 次 |
| 最近记录: |