代码之家  ›  专栏  ›  技术社区  ›  matt

在foreach循环中将文件移动到目录中?

  •  1
  • matt  · 技术社区  · 14 年前

    我不知道该怎么做,需要你的帮助!

    我有一个名为$bundle的文件名数组。(文件\1.jpg,文件\2.pdf,文件\3.etc) 我把文件夹的名称存储在$folder中。(My目录)

    现在我想将存储在$bundle中的所有文件移动到目录$folder。

    我该怎么做?

        //print count($bundle); //(file_one.jpg, file_two.pdf, file_three.jpg)
        $folder = $folder = PATH . '/' . my_directory;
     foreach ($bundle as $value) {
    
      //rename(PATH.'/'.$value, $folder . '/' . $value);
    
     }
    

    只是为了避免混淆:path只存储我为我的项目使用的本地文件路径。在我的情况下,它只是我工作的文件夹,所以它是“文件”。

    我不知道该用哪种方法来解决这个问题,也不知道该如何解决这个问题!

    谢谢你的帮助!

    3 回复  |  直到 14 年前
        1
  •  1
  •   codaddict    14 年前

    您给出的代码应适用于较小的更改:

    $folder = PATH . '/' . 'my_directory'; // enclose my_directory in quotes.
    foreach ($bundle as $value) {
            $old = PATH.'/'.$value, $folder;
            $new = $folder . '/' . $value;
            if(rename($old,$new) !== false) {
                    // renamed $old to $new
            }else{
                    // rename failed.
            }
    }
    
        2
  •  0
  •   Maulik Vora    14 年前
    $folder = PATH . '/' . $folder;
    foreach ($bundle as $value) {
            $old = PATH.'/'.$value;
            $new = $folder . '/' . $value;
            if(rename($old,$new) !== false) {
                    // renamed $old to $new
            }else{
                    // rename failed.
            }
    }
    
        3
  •  0
  •   Gordon Haim Evgi    14 年前

    未经测试但应有效:

    function bulkMove($src, $dest) {
        foreach(new GlobIterator($src) as $fileObject) {
            if($fileObject->isFile()) {
                rename(
                    $fileObject->getPathname(),
                    rtrim($dest, '\\/') . DIRECTORY_SEPARATOR . $fileObject->getBasename()
                );
            }
        }
    }
    bulkMove('/path/to/folder/*', '/path/to/new/folder');
    

    可以添加一些检查以查看目标文件夹是否可写。如果不需要通配符匹配,请更改 GlobIterator DirectoryIterator . 这也将消除对php5.3的需求。