Я пытаюсь скопировать файлы из определенной папки ($ src) в конкретный пункт назначения ($ dst). Здесь я получил код из этого учебника. Кажется, я не могу копировать файлы в исходном каталоге.
<?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); } ?>
Я не получаю ошибок для вышеуказанного кода.
Я просто попробовал это, и это сработало для меня как шарм.
<?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); } ?>
Я бы просто использовал команду оболочки для этого, если у вас нет специального лечения, которое вы пытаетесь сделать (например, фильтрация определенных файлов или что-то еще).
Пример для 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));
Конечно, вы бы использовали все доступные вам опции из командной оболочки, если вы хотите настроить поведение (т. Е. Изменить право собственности и т. Д.).
Это также должно выполняться намного быстрее, чем ваш файловый рекурсивный подход.