PHP展平目录

时间:2018-05-08 13:41:39

标签: php flysystem

我正在使用flysystem来处理我的文件。

我没有看到一种简单的方法来展平目录所以我使用了这个

public function flattenDir($dir, $destination = null) {
  $files = find($dir . '/*');
  foreach ($files as $file) {
       $localdir = dirname($file);

       if (!isDirectory($file)) {
            $destination = $dir . '/' . basename($file);
            move($file, $destination);
       }
       if (isDirectory($localdir) && isEmptyDirectory($localdir) && ($localdir != $dir)) {
            remove($localdir);
       }
  }
}

使用flysystem有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我终于使用了那个。它还管理我需要的一些东西

我正在使用flysystem mount manager,但可以轻松修改此脚本以使用默认的flysystem实例。

$elements应该是manager->listContents('local://my_dir_to_flatten');

的结果

$root在我的案例中是一个字符串my_dir_to_flatten

public function flatten($elements , $root) {

    $files = array();
    $directories = array();

    //Make difference between files and directories
    foreach ($elements as $element) {

      if( $element['type'] == 'file' ) {
        array_push($files, $element);
      } else {
        array_push($directories, $element);
      }

    }

    //Manage files
    foreach ($files as $file) {

      //Dont move file already in root
      if($file['dirname'] != $root) {
        //Check if filename already used in root directory
        if (  $this->manager->has('local://'.$root . '/' . $file['basename']) ) {
          //Manage if file don't have extension
          if( isset( $file['extension']) ) {
            $file['basename'] = $file['filename'] . uniqid() . '.' . $file['extension'];
          } else {
            $file['basename'] = $file['filename'] . uniqid();
          }
        }

        //Move the file
        $this->manager->move('local://' . $file['path'] , 'local_process://' . $root . '/' . $file['basename']);
      }

    }

    //Delete folders
    foreach ($not_files as $file) {
      $this->manager->deleteDir( 'local://' . $file['path'] );
    }
  }