Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Репликация папок/резервное копирование
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Репликация папок/резервное копирование

Страниц (1): [1]
 

1. Moxa - 12 Июня, 2016 - 09:36:26 - перейти к сообщению
Всем привет.

Задача - периодическая репликация папок, т.е. копирование только измененного или нового содержимого. Есть рабочий php скрипт:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. function dircpy($source, $dest, $overwrite = false){
  4. if(!is_dir($dest))
  5. mkdir($dest);
  6. if($handle = opendir($source)){
  7. while(false !== ($file = readdir($handle))){
  8. if($file != '.' && $file != '..'){
  9. $path = $source . '/' . $file;
  10. if(is_file($path)){
  11. if(!is_file($dest . '/' . $file) || $overwrite)
  12. if(!@copy($path, $dest . '/' . $file)){
  13. echo '<font color="red">File ('.$path.') could not be copied, likely a permissions
  14. problem.</font>';
  15. }
  16. } elseif(is_dir($path)){
  17. if(!is_dir($dest . '/' . $file))
  18. mkdir($dest . '/' . $file); // make subdirectory before subdirectory is copied
  19. dircpy($path, $dest . '/' . $file, $overwrite); //recurse!
  20. }
  21. }
  22. }
  23. closedir($handle);
  24. }
  25. }
  26.  
  27.  
  28. $zz="D:\JAVA\-from" ;
  29. $zx="L:\-to" ;
  30. dircpy($zz, $zx, $overwrite = false);
  31.  
  32. ?>
  33.  


проблема в том, что при вызове функции с параметром
$overwrite = false - во время копирования игнорируются измененные файлы с тем же именем, а при
$overwrite = true - то копируется с перезаписью тотально всё содержимое, в том числе уже имеющееся в целевой папке; папка огромна и длительный проход колоссального ненужного трафика - неприемлем.

Спасибо.
2. Viper - 12 Июня, 2016 - 10:29:47 - перейти к сообщению
Тут проблема
PHP:
скопировать код в буфер обмена
  1. if(is_file($path)){
  2. if(!is_file($dest . '/' . $file) || $overwrite)
$overwrite в первом if должен быть, и нужно добавить сравнение по имени файла не зависимо от пути. Т.е. отделите имя файла от пути и проверяйте.
3. Moxa - 12 Июня, 2016 - 12:21:28 - перейти к сообщению
Спасибо.

простите, не до конца понятно Закатив глазки
4. Moxa - 12 Июня, 2016 - 23:15:24 - перейти к сообщению
вероятно, необходимо создавать массив, куда передавать файлы, с датой создания отличных от уже имеющихся в папке-приемнике, и потом их уже и копировать с режимом overwrite ?
только начинаю в пхп.

Спасибо.

 

Powered by ExBB FM 1.0 RC1