Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. PHP
  3. Копирование, перемещение и переименование папки в PHP
logo

Копирование, перемещение и переименование папки в PHP

17.02.2015

Копирование каталога

Для копирования папки в PHP необходимо реализовать собственную функцию. Готовое решение можно получить ниже, а сейчас попробуем разобраться, каким образом решается эта задача.

По сути, вся сложность работы с каталогами, а это не только копирование, но и удаление, и перемещение каталога, заключается в содержащихся в них подкаталогах и вложенных файлах. Сложно учесть весь процесс обработки и предусмотреть все возможные события для неопределенного объема вложений. А это может быть:

- некорректно заданный исходный или новый каталог;

- сам новый каталог или вложенные в него файлы уже существуют;

- невозможно выполнить копирование отдельных файлов или папок;

- закончилось место на носителе.

Сам механизм копирования папки сводится к несложному рекурсивному алгоритму, в котором:

1. функции MyCopyAll предлагается скопировать папку "myfolder" в "newfolder".
2. если заданный путь является файлом, то выполняем копирование.
Иначе:
3. если заданной папки не существует, то создаем ее, и выполняем повторный вызов
функции с теми же параметрами.
Иначе:
4. получаем список содержащихся в исходной папке файлов и подкаталогов.
5. запускаем цикл по полученному списку и делаем вызов той же функции
с указанием вложенных директорий.

В итоге получится подобный код:

 my_copy_all($from, $to) {
if (is_dir($from)) {
@mkdir($to);
$d = dir($from);
while (false !== ($entry = $d->read())) {
if ($entry == "." || $entry == "..") continue;
my_copy_all("$from/$entry", "$to/$entry");
}
$d->close();
}
else copy($from, $to);
}

my_copy_all("myfolder",

Здесь:

- функция is_dir проверяет, является ли заданный объект каталогом;

- функция mkdir пытается создать директорию (символ @ указывает не выводить ошибки, если создать каталог не получается);

- функция copy копирует файл;

- функция dir создает объект для работы с каталогом;

- $d->read() – выполняет чтение имени объекта (файла или папки) из объекта каталога;

- $d->close() – завершает работу с объектом каталога.

Полученная функция выполняет копирование папки со всеми вложениями, заменяя имеющиеся в новой директории файлы, если они есть. Если нужно сохранять старые файлы, можно добавить условие перед копированием файла. Но лучше добавить параметр, отвечающий за перезапись файлов:

function my_copy_all($from, $to, $rewrite = true) {
if (is_dir($from)) {
@mkdir($to);
$d = dir($from);
while (false !== ($entry = $d->read())) {
if ($entry == "." || $entry == "..") continue;
my_copy_all("$from/$entry", "$to/$entry", $rewrite);
}
$d->close();
} else {
if (!file_exists($to) || $rewrite)
copy($from, $to);
}
}

my_copy_all("myfolder","newfolder", false); // вызов копирования без перезаписи

Перемещение и переименование каталогов

И перемещение, и переименование папки выполняется одной функцией rename. В качестве параметров ей задается путь к исходному каталогу, и новый путь.

rename("myfolder","newfolder"); // переименование

 

rename("myfolder","newfolder/myfolder"); // перемещение

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

Другие материалы:

Функция file_exists в PHP, описание и примеры


Создание, назначение доступа, удаление и проверка наличия папки в PHP


Удаление из строки HTML тегов в PHP


Написать комментарий

Комментарии

В комментариях запрещено публиковать рекламные материалы. Все сообщения оправляются на модерацию и будут опубликованы, если не нарушают правил сайта после проверки.


коммент.

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных