为了账号安全,请及时绑定邮箱和手机立即绑定

要忽略的递归副本集文件夹

要忽略的递归副本集文件夹

PHP
慕田峪7331174 2022-10-28 14:54:19
我正在使用此功能将部分 WordPress 复制到备份目录中,但是当我备份插件目录时,程序进入无限循环,有没有办法在复制文件夹时设置要忽略的文件夹?从回显 $dir 我只是得到#resource ID xfunction sisb_content_dir_copy($src, $dst) {$dir = opendir($src);// Make the destination directory if not exist@mkdir($dst);// Loop through the files in source directorywhile( $file = readdir($dir) ) {  echo $file."</br>";    if (( $file != '.' ) && ( $file != '..' )){        if ( is_dir($src . '/' . $file) )        {            // Recursively calling custom copy function            // for sub directory            sisb_content_dir_copy($src . '/' . $file, $dst . '/' . $file);        }        else {            copy($src . '/' . $file, $dst . '/' . $file);        }    }}closedir($dir);}
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

只要您运行的 PHP 版本高于 5.4,您就可以使用 PHP 内置的 DirectoryIterator 和 FilterIterator 类来实现您的目标。使用 Filter 类,您可以声明迭代器接受哪些文件和目录。除此之外,内置的迭代器类更快,并且不会影响内存消耗。这是一个小例子。


<?php

$directory = new RecursiveDirectoryIterator($path, FilesystemIterator::FOLLOW_SYMLINKS);

$filter = new RecursiveCallbackFilterIterator($directory, function($current, $key, $iterator) {

    // Skip hidden files and directories.

    if ($current->getFilename()[0] === '.') {

        return FALSE;

    }


    if ($current->isDir()) {

        // Only recurse into intended subdirectories

        return $current->getFilename() === 'wanted_dirname';

    } else {

       // Only consume files of interest.

       return strpos($current->getFilename(), 'wanted_filename') === 0;

    }

});


$iterator = new RecursiveIteratorIterator($filter);

$files = [];


foreach ($iterator as $info) {

   $files[] = $info->getPathname();

}

该$files数组包含所有通过回调过滤器的文件。这些文件你可以复制到任何你想要的地方。RecursiveCallbackFilterIterator类是 PHP 内置类,您可以从 PHP 5.4 开始使用。


此示例取自RecursiveDirectoryIterator类的 PHP 文档。感谢太阳,他在六年前做到了这一点。


希望有帮助。;)


查看完整回答
反对 回复 2022-10-28
?
暮色呼如

TA贡献1853条经验 获得超9个赞

只要您可以访问足够高的 PHP 版本,接受的答案会更好,但这适用于其他版本


function sisb_content_dir_copy($src, $dst) {

//echo $src.'</br>';

$dir = opendir($src);

//echo '</br>'.$dst;

// Make the destination directory if not exist

//if (!file_exists('/srv/www/sisb/public_html/wp-content/plugins/WP-SISB/contentbackups')) {

@mkdir($dst);

//}

// Loop through the files in source directory

while( $file = readdir($dir) ) {

  echo $file."</br>";

    if (( $file != '.' ) && ( $file != '..' )){

        if ( is_dir($src . '/' . $file) && ($file !='unwanted folder'))

        {


            // Recursively calling custom copy function

            // for sub directory

            sisb_content_dir_copy($src . '/' . $file, $dst . '/' . $file);


        }

        else {

          if($file !='unwanted folder'){

            copy($src . '/' . $file, $dst . '/' . $file);

          }

        }

    }

}


closedir($dir);

}


查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号