Подскажите функцию или класс по копированию файлов и папок

Solomon Kane

Постоялец
Регистрация
26 Авг 2009
Сообщения
144
Реакции
9
Как известно, php не умеет на лету копировать директории. Поэтому приходится изгаляться и писать свои функции. Глянул через Яндекс и Google, есть парочка примеров, но ХЗ, насколько они рабочие. В общем, нужна функция, которую вы уже неоднократно испробовали в своей работе и она работает, как часы, чтобы могла копировать, как файлы, так и папки. То есть чтобы если это вдруг оказывался файл, а не папка, она не начинала ругаться, а копировала просто файл. Главное требование - функция должна именно копировать файлы и папки, которые не загружены (такие примеры попадались) через форму, а те, что указаны в качестве параметров. Что-то типа ext_copy($start, $end);

Кто что может посоветовать?
 
Посоветовал бы вам сесть и написать самостоятельно то что вам необходимо, а не искать готовое решение, тем более не понятно что может быть зашито в это решение.

ТЗ (какое не какое) у вас уже есть, так что если сами не осилите написание необходимого функционала, можете обратиться за платной помощью к специалисту.

Лично я реализовал для себя целый набор функций обеденный в класс для работы с файловой системой.

То что вам необходимо я думаю наврядли у кого то завалялось именно в желаемом вам виде.
 
Замутил кое-что своё. Вот оно:

PHP:
function ext_copy($start, $end, $files)
  {
        foreach ($files as $value)
        {
            if (is_file($start.$value))
            {
                copy($start.$value, $end.$value);
            }
            if (is_dir($start.$value))
            {
                mkdir($end.$value);
                $dir_map = directory_map($start.$value, TRUE);
                if (!empty($dir_map))
                {
                    foreach ($dir_map as $val)
                    {
                        if(is_file($start.$value."/".$val))
                        {
                            copy($start.$value."/".$val, $end.$value."/".$val);
                        }
                        if (is_dir($start.$value."/".$val))
                        {
                            mkdir($end.$value."/".$val);
                            $arr = directory_map($start.$value."/".$val."/", TRUE);
                            $this->ext_copy($start.$value."/".$val."/", $end.$value."/".$val."/", $arr);
                        }
                    }
                }
            }
        }
  }

Для тех, кто не знает, что такое directory_map(), это функция, которая возвращает в виде массива содержимое папки (это не родная функция php). TRUE - означает, что возвращается только первый уровень, то есть если в папке есть два файла и папка, то только их названия и вернёт. Если же TRUE убрать, то вернёт и то, что находится в папке, помимо двух файлов.

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

Просьба к разбирающимся людям глянуть на скрипт и посоветовать, что дописать или изменить. Может, проверки какие-то или как-то сократить можно.
 
Назад
Сверху