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 文档。感谢太阳,他在六年前做到了这一点。
希望有帮助。;)

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);
}
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报