0

我正在使用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有更简单的方法吗?

4

1 回答 1

0

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

我正在使用flysystem 挂载管理器,但这个脚本可以很容易地适应默认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'] );
    }
  }
于 2018-05-08T15:22:36.817 回答