我正在使用此功能将WordPress的某些部分复制到备份目录中,但是当我备份plugins目录时,程序进入无限循环,有没有办法设置在复制文件夹时忽略的文件夹?从呼出$ dir我只得到#resource ID x
function sisb_content_dir_copy($src, $dst) {
$dir = opendir($src);
// Make the destination directory if not exist
@mkdir($dst);
// Loop through the files in source directory
while( $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);
}
答案 0 :(得分:1)
只要您运行的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文档。感谢太阳,六年前他做到了。
希望有帮助。 ;)
答案 1 :(得分:0)
只要您可以访问足够高的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);
}