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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Репликация папок/резервное копирование

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Скрипт копирования
Moxa
Отправлено: 12 Июня, 2016 - 09:36:26
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Всем привет.

Задача - периодическая репликация папок, т.е. копирование только измененного или нового содержимого. Есть рабочий 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 - то копируется с перезаписью тотально всё содержимое, в том числе уже имеющееся в целевой папке; папка огромна и длительный проход колоссального ненужного трафика - неприемлем.

Спасибо.
 
 Top
Viper
Отправлено: 12 Июня, 2016 - 10:29:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Тут проблема
PHP:
скопировать код в буфер обмена
  1. if(is_file($path)){
  2. if(!is_file($dest . '/' . $file) || $overwrite)
$overwrite в первом if должен быть, и нужно добавить сравнение по имени файла не зависимо от пути. Т.е. отделите имя файла от пути и проверяйте.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Moxa
Отправлено: 12 Июня, 2016 - 12:21:28
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




Спасибо.

простите, не до конца понятно Закатив глазки
 
 Top
Moxa
Отправлено: 12 Июня, 2016 - 23:15:24
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2016  


Помог: 0 раз(а)




вероятно, необходимо создавать массив, куда передавать файлы, с датой создания отличных от уже имеющихся в папке-приемнике, и потом их уже и копировать с режимом overwrite ?
только начинаю в пхп.

Спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB