2 回答

TA貢獻1831條經(jīng)驗 獲得超9個贊
只要您運行的 PHP 版本高于 5.4,您就可以使用 PHP 內(nèi)置的 DirectoryIterator 和 FilterIterator 類來實現(xiàn)您的目標。使用 Filter 類,您可以聲明迭代器接受哪些文件和目錄。除此之外,內(nèi)置的迭代器類更快,并且不會影響內(nèi)存消耗。這是一個小例子。
<?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數(shù)組包含所有通過回調(diào)過濾器的文件。這些文件你可以復制到任何你想要的地方。RecursiveCallbackFilterIterator類是 PHP 內(nèi)置類,您可以從 PHP 5.4 開始使用。
此示例取自RecursiveDirectoryIterator類的 PHP 文檔。感謝太陽,他在六年前做到了這一點。
希望有幫助。;)

TA貢獻1853條經(jīng)驗 獲得超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 關注
- 128 瀏覽
添加回答
舉報