PHP递归删除函数
我编写了用于删除文件夹的递归PHP函数。我想知道,如何修改此函数以删除webhosting中的所有文件和文件夹,不包括给定的文件和文件夹名称数组(例如.cgi-bin、.htaccess) 顺便说一句 使用此函数完全删除这样的目录调用PHP递归删除函数,php,recursion,delete-file,dir,unlink,Php,Recursion,Delete File,Dir,Unlink,我编写了用于删除文件夹的递归PHP函数。我想知道,如何修改此函数以删除webhosting中的所有文件和文件夹,不包括给定的文件和文件夹名称数组(例如.cgi-bin、.htaccess) 顺便说一句 使用此函数完全删除这样的目录调用 recursive_remove_directory('path/to/directory/to/delete'); 要使用此函数清空目录调用,请执行以下操作: recursive_remove_directory('path/to/full_directory
recursive_remove_directory('path/to/directory/to/delete');
要使用此函数清空目录调用,请执行以下操作:
recursive_remove_directory('path/to/full_directory',TRUE);
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('%yourBaseDir%'),
RecursiveIteratorIterator::CHILD_FIRST
);
$excludeDirsNames = array();
$excludeFileNames = array('.htaccess');
foreach($it as $entry) {
if ($entry->isDir()) {
if (!in_array($entry->getBasename(), $excludeDirsNames)) {
try {
rmdir($entry->getPathname());
}
catch (Exception $ex) {
// dir not empty
}
}
}
elseif (!in_array($entry->getFileName(), $excludeFileNames)) {
unlink($entry->getPathname());
}
}
现在函数是
function recursive_remove_directory($directory, $empty=FALSE)
{
// if the path has a slash at the end we remove it here
if(substr($directory,-1) == '/')
{
$directory = substr($directory,0,-1);
}
// if the path is not valid or is not a directory ...
if(!file_exists($directory) || !is_dir($directory))
{
// ... we return false and exit the function
return FALSE;
// ... if the path is not readable
}elseif(!is_readable($directory))
{
// ... we return false and exit the function
return FALSE;
// ... else if the path is readable
}else{
// we open the directory
$handle = opendir($directory);
// and scan through the items inside
while (FALSE !== ($item = readdir($handle)))
{
// if the filepointer is not the current directory
// or the parent directory
if($item != '.' && $item != '..')
{
// we build the new path to delete
$path = $directory.'/'.$item;
// if the new path is a directory
if(is_dir($path))
{
// we call this function with the new path
recursive_remove_directory($path);
// if the new path is a file
}else{
// we remove the file
unlink($path);
}
}
}
// close the directory
closedir($handle);
// if the option to empty is not set to true
if($empty == FALSE)
{
// try to delete the now empty directory
if(!rmdir($directory))
{
// return false if not possible
return FALSE;
}
}
// return success
return TRUE;
}
}
递归删除目录()
提供一个额外的数组参数$exclusions
,但每次都必须递归地传递此参数$Exclutions
设置为全局。通过这种方式,可以在递归的每一个级别访问它试着这样做:
recursive_remove_directory('path/to/full_directory',TRUE);
$it = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('%yourBaseDir%'),
RecursiveIteratorIterator::CHILD_FIRST
);
$excludeDirsNames = array();
$excludeFileNames = array('.htaccess');
foreach($it as $entry) {
if ($entry->isDir()) {
if (!in_array($entry->getBasename(), $excludeDirsNames)) {
try {
rmdir($entry->getPathname());
}
catch (Exception $ex) {
// dir not empty
}
}
}
elseif (!in_array($entry->getFileName(), $excludeFileNames)) {
unlink($entry->getPathname());
}
}
我正在使用此功能删除包含所有文件和子文件夹的文件夹:
function removedir($dir) {
if (substr($dir, strlen($dir) - 1, 1) != '/')
$dir .= '/';
if ($handle = opendir($dir)) {
while ($obj = readdir($handle)) {
if ($obj != '.' && $obj != '..') {
if (is_dir($dir . $obj)) {
if (!removedir($dir . $obj))
return false;
}
else if (is_file($dir . $obj)) {
if (!unlink($dir . $obj))
return false;
}
}
}
closedir($handle);
if (!@rmdir($dir))
return false;
return true;
}
return false;
}
$folder_to_delete = "folder"; // folder to be deleted
echo removedir($folder_to_delete) ? 'done' : 'not done';
Iirc我是从php.net中得到这个的我的基本目录是www文件夹,带有这个函数的文件将在www文件夹中。什么是
%yourBaseDir%
?它也会做整个递归文件夹删除??以及如何处理.htaccess?我的基本目录是www文件夹,具有此功能的文件将位于www文件夹内。什么是%yourBaseDir%?我的意思是,该函数必须删除当前文件夹中的所有文件和文件夹,并排除数组,以及它自己的错误:`Directory not empty on line rmdir($entry->getPathname());'仍然存在问题:目录不为空有人给了我一个想法:if(substr($oneExcludedFileOrDirectory,0,strlen($currentDir)==$currentDir){echo“Directory not empty”;}但我不知道现有实现应该在哪里看到它。