Помощник
|
Копирование каталога с содержимым |
matroskin8
|
Сообщение
#1
|
||
|
|
||
|
|||
gaaarfild |
20.9.2010, 19:32;
Ответить: gaaarfild
Сообщение
#2
|
|
Здесь необходимо вызвать функцию копирования рекурсивно, каждый раз задавая уровень в ней через параметры.
|
|
|
ZiTosS |
20.9.2010, 23:02;
Ответить: ZiTosS
Сообщение
#3
|
|
matroskin8,
1) Почитайте про рекурсию, данный метод вам поможет в копировании бесконечной вложенности папок. 2) Вам нужно поочередно проходить по каталогу, спускаясь от узла к узлу и проверять, что за узел - папка или файл. Если папка, то вызываем функцию копирования папки, а в качестве параметра текущую папку + имя каталога. Если файл, то просто копируем его в текущий каталог. Вот и весь алгоритм.Покажу как примерно происходит копирование при рекурсии по действиям (1) главная папка (2) папка 1 (3) папка 1_1 (4) файл 1_1_1 (5) папка 1_2 (6) файл 1_2_1 (7) файл 1_2_2 (8) файл 1_3 (9) папка 1_4 (10) папка 1_4_1 (11) файл 1_4_2 (12) файл 1_4_3 (13) папка 1_4_4 (14) файл 1_4_4_1 (15) папка 2 (16) файл 2_1 В скобках указан порядок действия копирования. Что тут нужно уяснить. Изначально вызываем функцию копирования и передаём ей в качестве параметра путь до главного каталога копирования и вторым параметром название этого каталога, а так же путь куда копируем. Эта функция создаёт относительно пути копирования папку и начинает в неё копировать содержимое источника, как только функция нашла в списке узлов каталог, она вызывает саму себя, но в качестве параметров уже передаёт путь до каталога, который надо скопировать и уже его имя и так далее. Таким образом, функция копирует файлы. Как только она находит каталог, то вызывает саму себя. Начинает выполняться вызванная внутренняя функция(т.е. та же самая функция, но с др. параметрами). Как только она завершится, продолжит свою работу внешняя функция, которая продолжит копировать файлы. Если найдется ещё каталог, то будет вызвана опять рекурсивная функция(функция вызовет саму себя). Понятное дело, что не нужно забывать, что в каждом каталоге имеются 2 узла, которые нужно пропускать - это "."(ссылка на себя) и ".."(ссылка на родитель). А так же нужно понимать, что никаких условий завершения здесь быть не должно. Когда не останется каталогов, функция больше не будет вызывать саму себя, и доработает до конца. |
|
|
matroskin8
|
Сообщение
#4
|
|
Ок, спасибо - буду пробовать.
|
|
|
ZiTosS |
21.9.2010, 22:18;
Ответить: ZiTosS
Сообщение
#5
|
|
matroskin8, если не получится, поможем.
|
|
|
matroskin8
|
Сообщение
#6
|
|
Спасибо - все получилось. Это я просто решал для себя задачу, хотя получилось немного методом "тыка"... но все же - все работает :) На практике, конечно, таким пользоваться не стоит ибо рекурсия очень ресурсоемка.
|
|
|
matroskin8
|
Сообщение
#7
|
|
В процессе решения задачи появился еще 1 вопрос. Сам скрипт копирования каталога лежит на локалхосте, каталог назначения тоже создается на локальной машине, каталог же копируемый находится на удаленном хосте. Насколько я понял в ф-ции opendir() указать URL нельзя... или можно, но как-то его "обернуть", сори за возможный неверный перевод, но так я понял из мануала.
Собственно вопрос, можно ли данной ф-цией открыть каталог на удаленном хосте или возможно ли это сделать каким-либо другим способом? |
|
|
ZiTosS |
23.9.2010, 22:03;
Ответить: ZiTosS
Сообщение
#8
|
|
matroskin8,
Начиная с версии PHP 4.3.0, параметр путь может также являться любым URL'ом, обращение к которому приводит к получению списка его файлов и каталогов. Однако, данный способ работает только при использовании url-упаковщика file://. В версии PHP 5.0.0 была добавлена поддержка url-упаковщика ftp:// По протоколам file и ftp можно почитать здесь пункт 3.3 Некоторые схемы URL Вообще для удаленного общения с хостом в PHP присутствуют функции FTP их и нужно использовать. Вот вы мне скажите, как вы сможете скачать файлы с удаленного хоста не имея логина и пароля. Всё же файлы по простым протоколам не выдаются |
|
|
matroskin8
|
Сообщение
#9
|
|
Про ф-ции ФТП знаю. Но интересовала именно возможность использования ф-ции opendir(). Понимаю, что скачать ничего с удаленного хоста не зная данных доступа - нельзя, но данные доступа есть.
|
|
|
ZiTosS |
26.9.2010, 15:23;
Ответить: ZiTosS
Сообщение
#10
|
|
matroskin8, не пробовал, поэтому точно не знаю. Но попробуйте подключиться сначала по HTTP и FTP, указав в качестве ссылки данные в формате:
http://www.ipm.kstu.ru/it/lec/3.php пункт 3.3 Там указана как должна строиться ссылка. Попробуйте и http и ftp. Прошу отписаться если что-либо удастся |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
[требуется] Копирование лендинга на Wordpress | 2 | LebedevStr | 1422 | 19.5.2023, 22:35 автор: malamut |
|
Есть работа по наполнению каталога товарами | 0 | karambas | 951 | 19.12.2020, 0:07 автор: karambas |
|
Продам 4 английских каталога сайтов в 2 раза дешевле себестоимости |
12 | autonew | 6383 | 11.8.2018, 10:59 автор: autonew |
|
Только успешные форумы и сайты с тиц от 10 и с яндекс каталога Только успешные форумы и сайты с тиц от 10 и с яндекс каталога |
1 | avtoreg2008 | 2326 | 29.8.2016, 9:10 автор: andrey10tic |
|
База сайтов Яндекс каталога (Февраль, 2014) | 23 | mixail77 | 22172 | 19.3.2016, 0:35 автор: mixail77 |
Текстовая версия | Сейчас: 20.4.2024, 10:15 |