同步插入php,php实现的实时同步两个文件夹功能 - 代码贴 - BCCN

$folder1 = "C:/Users/Administrator/Documents/Visual Studio 2015/Projects/vb-china/vb-china/";

$folder2 = "Z:/vb-china/";

$subdirs = ['Content','Scripts','Views','Areas/Admin/Views'];

# 只需要设置上面的3项,下面的就不用设置了

recursiveDelete($folder2); //每次开始前先清空从文件夹,此行可酌情屏蔽掉

//先做互通有无并初始化seri

$filenames1_new = get_filenames($folder1);

$filenames2_new = get_filenames($folder2);

$filenames_all_new = array_merge($filenames1_new, $filenames2_new);

$files_dict = [];

foreach ($filenames_all_new as $file) {

if (!in_array($file, $filenames1_new)) {

mycopy($folder2.$file, $folder1.$file);

}

if (!in_array($file, $filenames2_new)) {

mycopy($folder1.$file, $folder2.$file);

}

$files_dict[$file] = md5_file($folder1.$file);

}

$i = 0;

while (true) {

$i++;

usleep(500000);

foreach ($files_dict as $file => $md5) { //对比文件MD5

$file1_md5 = @md5_file($folder1.$file);

if ($file1_md5 and $file1_md5 != $md5) {

mycopy($folder1.$file, $folder2.$file);

print_line("modify: ".$folder1.$file);

$files_dict[$file] = md5_file($folder1.$file);

} else {

$file2_md5 = @md5_file($folder2.$file);

if ($file2_md5 and $file2_md5 != $md5) {

mycopy($folder2.$file, $folder1.$file);

print_line("modify: ".$folder2.$file);

$files_dict[$file] = md5_file($folder2.$file);

}

}

}

print_r('.');

if ($i%10 == 0) {

$filenames1_new = get_filenames($folder1);

$filenames2_new = get_filenames($folder2);

foreach (array_diff(array_keys($files_dict), $filenames1_new) as $deleted_file) { //先清理已删除的文件,并更新记录

unlink($folder2.$deleted_file);

print_line("delete: ".$deleted_file);

unset($files_dict[$deleted_file]);

}

foreach (array_diff($filenames1_new, array_keys($files_dict)) as $new_file) { //再添加新文件,并更新记录

mycopy($folder1.$new_file, $folder2.$new_file);

print_line("create: ".$folder1.$new_file);

$files_dict[$new_file] = md5_file($folder1.$new_file);

}

foreach (array_diff(array_keys($files_dict), $filenames2_new) as $deleted_file) { //先清理已删除的文件,并更新记录

unlink($folder1.$deleted_file);

print_line("delete: ".$deleted_file);

unset($files_dict[$deleted_file]);

}

foreach (array_diff($filenames2_new, array_keys($files_dict)) as $new_file) { //再添加新文件,并更新记录

mycopy($folder2.$new_file, $folder1.$new_file);

print_line("create: ".$folder2.$new_file);

$files_dict[$new_file] = md5_file($folder2.$new_file);

}

print_r('|');

}

}

function get_filenames($folder)

{

global $subdirs;

$filenames = [];

foreach ($subdirs as $dir) {

$dir1 = $folder.'/'.$dir;

foreach (walk($dir1.'/**.*') as $file) {

$filenames[] = str_replace($folder, '', $file);

}

}

return $filenames;

}

function walk($pattern){

$files = glob($pattern);

foreach(array_reverse(glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT)) as $dir){

$files = array_merge(walk($dir.'/'.basename($pattern)), $files);

}

return $files;

}

function mycopy($s1,$s2) {

$path = pathinfo($s2);

if (!file_exists($path['dirname'])) {

mkdir($path['dirname'], 0777, true);

}

if (!copy($s1,$s2)) {

echo "copy failed\n";

}

}

function print_line($str)

{

print_r("\n\n");

print_r(date("H:i:s").' '.$str);

print_r("\n\n");

}

function recursiveDelete($str) {

if (is_file($str)) {

return @unlink($str);

} elseif (is_dir($str)) {

$scan = glob(rtrim($str,'/').'/*');

foreach($scan as $index=>$path) {

recursiveDelete($path);

}

return @rmdir($str);

}

return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值