2013-10-02 2 views
4

Я пытаюсь скопировать файлы из определенной папки ($ src) в конкретный пункт назначения ($ dst). Я получил код из этого урока here. Кажется, я не могу копировать файлы в исходном каталоге.PHP скопировать все файлы в каталог в другой?

<?php 


$src = 'pictures'; 
$dst = 'dest'; 

function recurse_copy($src,$dst) { 
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ($file = readdir($dir))) { 
     if (($file != '.') && ($file != '..')) { 
      if (is_dir($src . '/' . $file)) { 
       recurse_copy($src . '/' . $file,$dst . '/' . $file); 
      } 
      else { 
       copy($src . '/' . $file,$dst . '/' . $file); 
      } 
     } 
    } 
    closedir($dir); 
} 

?> 

У меня нет ошибок для вышеуказанного кода.

+0

Вы можете прочитать файлы? вы получаете какую-либо ошибку? –

+1

Мне нравится, как много задают вопрос, оставляя самую важную часть, сообщение об ошибке ... – OIS

+0

По какой-то причине с помощью командной строки linux не может быть и речи? Не похоже, что вы делаете что-то особенно интересное здесь (например, отфильтровываете определенные файлы), поэтому я бы просто использовал команду linux (при необходимости, вызвал PHP). –

ответ

2

Я бы просто использовал команду оболочки, чтобы сделать это, если у вас нет специального лечения, которое вы пытаетесь сделать (например, фильтрация определенных файлов или что-то еще).

Пример для Linux:

$src = '/full/path/to/src'; // or relative path if so desired 
$dst = '/full/path/to/dst'; // or relative path if so desired 
$command = 'cp -a ' . $src . ' ' .$dst; 
$shell_result_output = shell_exec(escapeshellcmd($command)); 

Конечно, вы бы просто использовать любые варианты доступны для вас из команды оболочки, если вы хотите изменить поведение (т.е. изменение собственности и т.д.).

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

+0

Предпочитаемый подход для (1) производительности: как вы упомянули, это будет «выполнять намного быстрее, чем ваш файловый рекурсивный подход»; и (2) делегирование проблем: вы должны использовать файловую систему для работы с файловой системой, а php - для работы в Интернете. –

9

Я просто попробовал это, и это сработало для меня как шарм.

<?php 

$src = 'pictures'; 
$dst = 'dest'; 
$files = glob("pictures/*.*"); 
     foreach($files as $file){ 
     $file_to_go = str_replace($src,$dst,$file); 
     copy($file, $file_to_go); 
     } 

?> 
Смежные вопросы