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

Тема в разделе "PHP", создана пользователем kud, 9 июн 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kud

    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);
    }
    ?>
    Проблема в том что как организовать сохранение структуры вложенности на сервере ? Вобщем в коде там коммент в том месте где чего-то не хватает.
    Поможет кто-то ?
     
  2. PomanoB

    PomanoB Писатель

    Регистр.:
    30 май 2009
    Сообщения:
    5
    Симпатии:
    3
    Самый простой способ - рекурсия
    те если папка то вызываем эту же функция для папки, с передачей пути, если нет то копируем найденный
     
  3. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    Посмотри внимательней, функция - рекурсивная и в случае с папкой она вызывает сама себя.. посмотри внимательней, там перед вызовом даже коммент есть
     
  4. PomanoB

    PomanoB Писатель

    Регистр.:
    30 май 2009
    Сообщения:
    5
    Симпатии:
    3
    Ой, сорри, не обратил внимание на название функции
    делай ftp_chdir($directory) в начале функции ftp_copy
     
  5. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    Может получится так, что ftp_chdir() будет пытаться зайти в папку на сервре, которая по идее должна создаться позже ...
    если структура каталогов такая:
    dir1
    subdir1
    subsubdir1
    dir2

    то dir2 создастся в subsubdir1
     
  6. max-oligarh

    max-oligarh Постоялец

    Регистр.:
    4 май 2009
    Сообщения:
    68
    Симпатии:
    2
    самое главное не забывать про время выполнения: есть 2 варианта -
    1) php как cgi
    для этого
    в начале файла пишем:
    #!/usr/bin/php
    <?
    set_time_limit(0);
    ваш код
    ?>
    и сделайте файл исполняемым chmod 0755 /path/to/script
    ну или если не safe_mode то тогда достаточно просто set_time_limit(0);


    при этом 0 лучше не использовать - иначе можно положить сервер - поставьте просто разумное число
     
  7. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    В данном случае, время выполнения меня вообще не интересует )
    Интересует, как сохранить структуру вложенности на сервере
     
  8. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    можно добавить после ftp_mkdir($conn_id, $file); строчку
    PHP:
    ftp_chdir($conn_id,$file);
    а после ftp_copy("$directory/$file",$directory); строчку
    PHP:
    ftp_cdup($conn_id);
    попробуй.
     
    kud нравится это.
  9. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Вот неплохой класс http://www.phpclasses.org/browse/package/4138.html
    Один из многих, возможно стоит поискать уже реализованное решение на phpclasses
    Дальше. Как вариант более лучший- пройти рекурсией по папке и не перекидивать её а записать всё в многоуровневый массив, по которому и создавать папки. А затем записать этот массив в файл xml или json. Так будет легче, если планируется сделать докачку или частое изменение структуры.
     
    kud нравится это.
  10. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    Впринципе, для моих целей вполне покатит и эта функция ...
    Вот только бы еще разобраться почему при копировании файла:
    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
     
Статус темы:
Закрыта.