刚写了一个目录拷贝的代码,老师如果有时间的话,希望老师帮忙看一下,谢谢。
来源:2-10 文件及目录处理相关考点
silas666
2017-09-16
// 题目:目录及目录里的文件复制到新目录,
// 1.循环获取目录里的文件名,输出到数组
// 2.复制文件到新数组
// 1获取文件名,返回到一维数组(目录下的所有文件)格式:绝对目录+文件名
function getFilesName($dir){
if(!is_dir($dir)){
return '不是目录';
}
$res = [];
if( false != (@$handle = opendir($dir)) ){
while( false != ($file = readdir($handle)) ){
// 过滤掉 . .. 和 以.开头的文件
if($file != '.' && $file != '..' && 0 !== strpos($file, '.')){
$file_name = $dir . '/' .$file;
if(filetype($file_name) == 'file'){
array_push($res, $file_name);
} else if(filetype($file_name) == 'dir'){
foreach (getFilesName($file_name) as $file) {
array_push( $res, $file);
}
}
}
}
}
return $res;
}
// 循环创建目录
function loopCreateDir($path){
$dir = dirname($path); //从文件地址获得文件路径,文件名用basename
if(!file_exists($dir) ){ //file_exists — 检查文件或目录是否存在
loopCreateDir($dir);
mkdir($dir, 0777);
chmod($dir, 0777);
}
}
// 将目录中的文件复制到新目录
// 1.检测文件目录是否存在
function copyToNewDir($source_dir, $target_dir){
$files = getFilesName(__DIR__);
$target_files = str_replace($source_dir, $target_dir, $files); // 对数组批量替换
for ($i=0; $i < count($files); $i++) {
loopCreateDir($target_files[$i]);
// 复制文件,方法1
copy($files[$i], $target_files[$i]);
// 复制文件,方法2
//file_put_contents( $target_files[$i],file_get_contents($files[$i]) );
}
}
copyToNewDir(__DIR__, __DIR__.'/../b');请问,复制文件那里,方法1和方法2有什么区别呢?哪一种更好一些呢?谢谢老师
写回答
1回答
-
几个问题:
第一个函数的返回值,如果不是目录,返回false,这样比较容易判断使用
递归创建目录可以使用mkdir直接完成,不用这么麻烦,第三个参数给true即可
最后一个函数获取目录下的文件名称可以使用glob函数
132017-09-18
相似问题