我有以下文件夹结构:
images/photo-gallery/2e/
72/
rk/
u3/
va/
yk/
......等等。基本上,每次上传图像时,它都会散列名称,然后创建一个包含前两个字母的文件夹。因此,2e内部是 2e0gpw1p.jpg
这就是...如果我删除了一个图像,它将删除该文件,但它将保留它所在的文件夹。现在,当我上传了一些TON图像时,这将很好,因为很多图像将会共享相同的文件夹..但在那之前,我将最终拥有一堆空目录。
我想要做的是搜索照片库文件夹并浏览每个目录,看看哪些文件夹是空的..如果有任何空文件夹,那么它将删除它。
我知道如何为单个目录执行此操作,例如2e文件夹。但是我如何为照片库文件夹中的所有文件夹执行此操作?
答案 0 :(得分:1)
如果目录不为空,PHP函数rmdir()将发出警告,因此您可以在非空目录上使用它而不会有删除它们的风险。将它与scandir()和array_slice(删除。和..)相结合,你可以这样做:
foreach(array_slice(scandir('images/photo-gallery'),2) as $dir) {
@rmdir('images/photo-gallery/' . $dir); // use @ to silence the warning
}
答案 1 :(得分:0)
虽然你可以用php做,但我倾向于使用os来完成这样的任务。当然你可以用php调用下面的
find <parent-dir> -depth -type d -empty -exec rmdir -v {} \;
答案 2 :(得分:0)
请仔细阅读此警告我没有测试但是使用了类似的代码时间。如果您不理解这可能会使您自己从服务器上擦掉您的网站,请自行使用此功能并且不要使用。
编辑备份一切在尝试第一次之前路径非常非常重要!
好的,说这很容易:)
<?php
function recursiveDelete($path){
$ignore = array(
'cgi-bin',
'.',
'..'
); // Directories to ignore
$dh = opendir($path); // Open the directory
while(false !== ($file = readdir($dh))){ // Loop through the directory
if(!in_array($file, $ignore)){ // Check that this file is not to be ignored
if(is_dir($path."/".$file)){ // Its a directory, keep going
if(!iterator_count(new DirectoryIterator($path."/".$file)))
rmdir($path."/".$file); // its empty delete it
} else {
recursiveDelete($path."/".$file);// Recursive call to self
}
}
}
}
closedir($dh); // All Done close the directory
}
// WARNING IMPROPERLY USED YOU CAN DUMP YOUR ENTIRE SERVER USE WITH CAUTION!!!!
// I WILL NOT BE HELD RESPONSIBLE FOR MISUSE
recursiveDelete('/some/directoy/path/to/your/gallery');
?>