Метод copy
Метод copy класса Storage предназначен для копирования существующего файла из одного каталога в другой в рамках выбранного диска. Первым параметром передаётся путь к исходному файлу, вторым - путь к целевому файлу. Метод возвращает булево значение - true в случае успеха и false при ошибке.
Важно отметить, что при копировании файл сначала считывается с исходного пути, а затем записывается в новое место. Если целевой файл уже существует, он будет перезаписан. Метод работает со всеми дисками, поддерживаемыми Laravel: local, public, s3 и другими.
Синтаксис
<?php
Storage::copy($from, $to);
?>
Пример
Давайте скопируем файл 'file.txt' из корня диска local в каталог 'backup' с новым именем 'file_backup.txt':
<?php
use Illuminate\Support\Facades\Storage;
$from = 'file.txt';
$to = 'backup/file_backup.txt';
$res = Storage::copy($from, $to);
echo $res ? 'File copied successfully' : 'Failed to copy file';
?>
Результат выполнения кода:
"File copied successfully"
Пример
Скопируем файл из публичного диска в локальный с проверкой существования исходного файла:
<?php
use Illuminate\Support\Facades\Storage;
$from = 'photos/image.jpg';
$to = 'archive/image.jpg';
if (Storage::disk('public')->exists($from)) {
$res = Storage::disk('public')->copy($from, $to);
echo $res ? 'Copy completed' : 'Copy failed';
} else {
echo 'Source file not found';
}
?>
Результат выполнения кода:
"Copy completed"
Пример
Копирование файла с сохранением оригинального имени в другой каталог с использованием динамического пути:
<?php
use Illuminate\Support\Facades\Storage;
$filename = 'document.pdf';
$sourcePath = 'uploads/' . $filename;
$targetPath = 'archive/' . date('Y/m/d') . '/' . $filename;
$res = Storage::disk('local')->copy($sourcePath, $targetPath);
if ($res) {
echo 'File copied to: ' . $targetPath;
} else {
echo 'Failed to copy file';
}
?>
Результат выполнения кода:
"File copied to: archive/2026/09/07/document.pdf"
Пример
Копирование нескольких файлов из одного каталога в другой с проверкой результата:
<?php
use Illuminate\Support\Facades\Storage;
$files = ['file1.txt', 'file2.txt', 'file3.txt'];
$sourceDir = 'documents/';
$targetDir = 'backup/documents/';
$successCount = 0;
foreach ($files as $file) {
$from = $sourceDir . $file;
$to = $targetDir . $file;
if (Storage::disk('local')->exists($from)) {
if (Storage::disk('local')->copy($from, $to)) {
$successCount++;
}
}
}
echo 'Copied ' . $successCount . ' of ' . count($files) . ' files';
?>
Результат выполнения кода:
"Copied 3 of 3 files"