php copy 目录及文件夹_PHP 复制文件夹 到另一个文件夹 目标文件夹存在则覆盖文件...

$source = 'D:/source/';

$target = 'D:/target/';

echo copy_merge ( $source, $target );

/**

* 合并目录

* @param $source 要合并的文件夹

* @param $target 要合并的目的地

* @return int 处理的文件数7a686964616fe78988e69d8331333332643261

*/

function copy_merge($source, $target) {

// 路径处理

$source = preg_replace ( '#/\\\\#', DIRECTORY_SEPARATOR, $source );

$target = preg_replace ( '#\/#', DIRECTORY_SEPARATOR, $target );

$source = rtrim ( $source, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR;

$target = rtrim ( $target, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR;

// 记录处理了多少文件

$count = 0;

// 如果目标目录不存在,则创建。

if (! is_dir ( $target )) {

mkdir ( $target, 0777, true );

$count ++;

}

// 搜索目录下的所有文件

foreach ( glob ( $source . '*' ) as $filename ) {

if (is_dir ( $filename )) {

// 如果是目录,递归合并子目录下的文件。

$count += copy_merge ( $filename, $target . basename ( $filename ) );

} elseif (is_file ( $filename )) {

// 如果是文件,判断当前文件与目标文件是否一样,不一样则拷贝覆盖。

// 这里使用的是文件md5进行的一致性判断,可靠但性能低,应根据实际情况调整。

if (! file_exists ( $target . basename ( $filename ) ) || md5 ( file_get_contents ( $filename ) ) != md5 ( file_get_contents ( $target . basename ( $filename ) ) )) {

copy ( $filename, $target . basename ( $filename ) );

$count ++;

}

}

}

// 返回处理了多少个文件

return $count;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值