скопировать папку на сервер (ftp)

Статус
В этой теме нельзя размещать новые ответы.

kud

Постоялец
Регистрация
18 Фев 2009
Сообщения
89
Реакции
11
Как скопировать локальную папку (разный уровень вложенности) на сервер?
Я так полагаю что должно быть что-то вроде:
PHP:
<?php
function ftp_copy($directory,$destination) {
global $conn_id; // соединение с фтп
$dir = opendir($directory);
	while (($file = readdir($dir)) !== false) {
		if (is_file("$directory/$file")) {
			// если это файл загружаем его на сервер
		}
		if(is_dir("$directory/$file") && $file != '.' && $file != '..') {
			ftp_mkdir($conn_id, $file);
			// вот тут нужно как-то организовать проверку где мы находимся и что-то предпринять :) (либо зайти, либо выйти в/из $file)
			ftp_copy("$directory/$file",$directory);
		}
	}
	closedir($dir);
}
?>
Проблема в том что как организовать сохранение структуры вложенности на сервере ? Вобщем в коде там коммент в том месте где чего-то не хватает.
Поможет кто-то ?
 
Самый простой способ - рекурсия
те если папка то вызываем эту же функция для папки, с передачей пути, если нет то копируем найденный
 
Самый простой способ - рекурсия
те если папка то вызываем эту же функция для папки, с передачей пути, если нет то копируем найденный

Посмотри внимательней, функция - рекурсивная и в случае с папкой она вызывает сама себя.. посмотри внимательней, там перед вызовом даже коммент есть
 
Ой, сорри, не обратил внимание на название функции
делай ftp_chdir($directory) в начале функции ftp_copy
 
Ой, сорри, не обратил внимание на название функции
делай ftp_chdir($directory) в начале функции ftp_copy

Может получится так, что ftp_chdir() будет пытаться зайти в папку на сервре, которая по идее должна создаться позже ...
если структура каталогов такая:
dir1
subdir1
subsubdir1
dir2

то dir2 создастся в subsubdir1
 
самое главное не забывать про время выполнения: есть 2 варианта -
1) php как cgi
для этого
при этом 0 лучше не использовать - иначе можно положить сервер - поставьте просто разумное число
 
самое главное не забывать про время выполнения
В данном случае, время выполнения меня вообще не интересует )
Интересует, как сохранить структуру вложенности на сервере
 
можно добавить после ftp_mkdir($conn_id, $file); строчку
PHP:
ftp_chdir($conn_id,$file);
а после ftp_copy("$directory/$file",$directory); строчку
PHP:
ftp_cdup($conn_id);
попробуй.
 
  • Нравится
Реакции: kud
Вот неплохой класс Для просмотра ссылки Войди или Зарегистрируйся
Один из многих, возможно стоит поискать уже реализованное решение на phpclasses
Дальше. Как вариант более лучший- пройти рекурсией по папке и не перекидивать её а записать всё в многоуровневый массив, по которому и создавать папки. А затем записать этот массив в файл xml или json. Так будет легче, если планируется сделать докачку или частое изменение структуры.
 
  • Нравится
Реакции: kud
Впринципе, для моих целей вполне покатит и эта функция ...
Вот только бы еще разобраться почему при копировании файла:
PHP:
ftp_put($conn_id,$file,"$directory/$file", FTP_BINARY );
Выдает ошибку:
Warning: ftp_put() [function.ftp-put]: I won't open a connection to 127.0.0.1
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху