function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
我有这个功能来删除一个目录及其所有内容(子目录和子文件)。
此功能效果很好,可以在一两秒内删除超过5k的文件。
但有没有人对优化此功能有任何建议?
另外......如果有人有任何“系统”或方法在一台服务器上安全地托管自定义php功能并在其他服务器上调用它们让我知道...这将是很棒的,因为我有大量的功能和我使用3台服务器,并希望将它们全部放在一个位置。我使用cPanel的全局前置功能轻松地在我所有的php文件中包含我的所有函数,并且效果非常好但是如果有一种方法可以简单地将远程托管的PHP文件调用到服务器上每个文件中包含的前置文件中是一流的...任何类似设置的建议都会很棒。
答案 0 :(得分:1)
while
循环应该比foreach
更快,if
语句的顺序也很重要。
function removeDirectory($path)
{
$path = rtrim($path, '/').'/';
$files = scandir($path);
$i = count($files);
while (--$i) {
$file = $files[$i];
$fullpath = $path.$file;
is_file($fullpath)
? @unlink($fullpath)
: ($file != '.' and $file != '..' and removeDirectory($fullpath));
}
rmdir($path);
return true;
}
答案 1 :(得分:0)
如果允许执行shell执行,则可以执行简单的linux函数
$out = shell_exec('rm -rf /path/to/directory');
你可以做到
var_dump($out);
检查结果是否已删除。