Не работает рекурсивная функция для копирования многоуровневой папки - PullRequest
0 голосов
/ 07 мая 2010

Рекурсивная функция для копирования Многоуровневая папка не работает.

У меня есть код для копирования всех многоуровневых папок в новую папку.

Но между ними возникает проблема правильного распознавания пути, см. Код ниже.

<?php
$source = '/var/www/html/pranav_test';
$destination = '/var/www/html/parth';

copy_recursive_dirs($source, $destination);
function copy_recursive_dirs($dirsource, $dirdest)
{ 
  // recursive function to copy
 // all subdirectories and contents:
 if(is_dir($dirsource))
 {
  $dir_handle=opendir($dirsource);



 }
 if(!is_dir($dirdest))
 {
    mkdir($dirdest, 0777);
 }
 while($file=readdir($dir_handle))
 {/*echo "<pre>";
  print_r($file);*/
     if($file!="." && $file!="..")
     {
         if(!is_dir($dirsource.DIRECTORY_SEPARATOR.$file)) 
         {
           copy ($dirsource.DIRECTORY_SEPARATOR.$file, $dirdest.DIRECTORY_SEPARATOR.$dirsource.DIRECTORY_SEPARATOR.$file);
         }
         else{
            copy_recursive_dirs($dirsource.DIRECTORY_SEPARATOR.$file, $dirdest);
         }
     }
  }
 closedir($dir_handle);
 return true;
}

?>

из приведенного выше кода цикл if имеет функцию копирования в соответствии с требованием, но путь, примененный для пункта назначения здесь, не является правильным, я также пытался использовать функцию basename ... но он не получил ожидаемый результат ... цикл if, о котором я говорю, с комментарием, описывающим вывод ...

 if(!is_dir($dirsource.DIRECTORY_SEPARATOR.$file)) 
    {
      $basefile = basename($dirsource.DIRECTORY_SEPARATOR.$file);//it gives the file name
     echo "Pranav<br>".$dirdest.DIRECTORY_SEPARATOR.$dirsource.DIRECTORY_SEPARATOR.$file;//it outputs for example "/var/www/html/parth//var/www/html/pranav_test/media/system/js/caption.js" which is not correct..
    copy ($dirsource.DIRECTORY_SEPARATOR.$file, $dirdest.DIRECTORY_SEPARATOR.$dirsource.DIRECTORY_SEPARATOR.$file);
    }  

как показано выше, я не могу скопировать файлы и папки по ожидаемому пути ... пожалуйста, укажите, как правильно указать путь в функции ....

1 Ответ

2 голосов
/ 07 мая 2010

Я вижу некоторые странные вещи в коде относительно пути назначения dir и файлов, попробуйте этот код (не проверено):

<?php
$source = '/var/www/html/pranav_test';
$destination = '/var/www/html/parth';

copy_recursive_dirs($source, $destination);
function copy_recursive_dirs($dirsource, $dirdest)
{ 
  // recursive function to copy
 // all subdirectories and contents:
 if(is_dir($dirsource))
 {
  $dir_handle=opendir($dirsource);



 }
 if(!is_dir($dirdest))
 {
    mkdir($dirdest, 0777);
 }
 while($file=readdir($dir_handle))
 {/*echo "<pre>";
  print_r($file);*/
     if($file!="." && $file!="..")
     {
         if(!is_dir($dirsource.DIRECTORY_SEPARATOR.$file)) 
         {
            //Copy the file at the same level in the destination folder
            copy ($dirsource.DIRECTORY_SEPARATOR.$file, $dirdest.DIRECTORY_SEPARATOR.$file);
         }
         else{
            //Copy the dir at the same lavel in the destination folder
            copy_recursive_dirs($dirsource.DIRECTORY_SEPARATOR.$file, $dirdest.DIRECTORY_SEPARATOR.$file);
         }
     }
  }
 closedir($dir_handle);
 return true;
}

?>
...