在我的服务器中,我有文件夹和子目录
我想调用一个flatten方法到一个目录来移动同一级别的每个文件并删除所有空文件夹
这是我到目前为止所做的:
public function flattenDir($dir, $destination=null) {
$files = $this->find($dir . '/*');
foreach ($files as $file) {
if(!$destination){
$destination = $dir . '/' . basename($file);
}
if (!$this->isDirectory($file)) {
$this->move($file, $destination);
}else{
$this->flattenDir($file, $destination);
}
}
foreach ($files as $file) {
$localdir = dirname($file);
if ($this->isDirectory($localdir) && $this->isEmptyDirectory($localdir) && ($localdir != $dir)) {
$this->remove($localdir);
}
}
}
public function find($pattern, $flags = 0) {
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
$files = array_merge($files, $this->find($dir . '/' . basename($pattern), $flags));
}
return $files;
}
此代码在运行时不显示任何错误,但resukt不符合预期。
例如,如果我有/folder1/folder2/file
我想要/folder2/file
作为结果,但这里的文件夹仍然像他们在哪里...
答案 0 :(得分:0)
我终于使我的代码有效,我在这里发布以防万一
我简化了它以提高效率。顺便说一句,这个函数是我所做的filemanager classe的一部分,所以我使用了我自己的类的函数,但你可以简单地用$this->move($file, $destination);
替换move($file, $destination);
public function flattenDir($dir, $destination = null) {
$files = $this->find($dir . '/*');
foreach ($files as $file) {
$localdir = dirname($file);
if (!$this->isDirectory($file)) {
$destination = $dir . '/' . basename($file);
$this->move($file, $destination);
}
if ($this->isDirectory($localdir) && $this->isEmptyDirectory($localdir) && ($localdir != $dir)) {
$this->remove($localdir);
}
}
}