Копирование содержимого папки из одного места в другое — обычная задача при разработке PHP. Если вам нужно создавать резервные копии, синхронизировать данные или упорядочивать файлы, важно иметь эффективные методы копирования содержимого папок. В этой статье мы рассмотрим несколько подходов с примерами кода, которые помогут вам легко выполнить эту задачу.
Метод 1: использование RecursiveIteratorIterator и RecursiveDirectoryIterator
function copyFolderContents($source, $destination) {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $item) {
$target = $destination . DIRECTORY_SEPARATOR . $iterator->getSubPathName();
if ($item->isDir()) {
mkdir($target);
} else {
copy($item, $target);
}
}
}
Метод 2: использование функции glob()
function copyFolderContents($source, $destination) {
$files = glob($source . '/*');
foreach ($files as $file) {
$target = $destination . '/' . basename($file);
if (is_dir($file)) {
mkdir($target);
copyFolderContents($file, $target);
} else {
copy($file, $target);
}
}
}
Метод 3: использованиеshell_exec() с командой rsync (требуется доступ к оболочке)
function copyFolderContents($source, $destination) {
$command = "rsync -a $source/ $destination";
shell_exec($command);
}
Метод 4. Использование класса ZipArchive
function copyFolderContents($source, $destination) {
$zip = new ZipArchive;
$zip->open($destination, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$relativePath = substr($file->getPathname(), strlen($source) + 1);
$zip->addFile($file->getPathname(), $relativePath);
}
}
$zip->close();
}
Копировать содержимое папки в PHP можно различными способами, каждый из которых имеет свои преимущества. В этой статье были продемонстрированы четыре различных подхода, включая использование RecursiveIteratorIterator и RecursiveDirectoryIterator, функции glob(), Shell_exec() с командой rsync и класса ZipArchive. В зависимости от ваших конкретных требований и среды вы можете выбрать наиболее подходящий метод эффективного копирования содержимого папки в PHP.