Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите пли с ftp

61K
16 сентября 2010 года
tonechka
11 / / 16.09.2010
Всем привет! У меня такая проблема: есть ftp, на нем есть определенная структура папок, подпапок и файлов.. мне нужно написать
кодик, который будет брать с сервера определенную папку (например по названию), и все что есть в ней(все вложенные папки,
вложенные в них папки, файлы и т.п.) копировать в другое место, которое я ему укажу... ПОМОГИТЕ плиз написсать... до меня пока
доходит только как соединится с сервером и авторизоваться, и как просто сохранить с фтп файл по имени... но это не то....Напишите
кто нить хоть примерный кодик!!!
244
17 сентября 2010 года
UAS
2.0K / / 19.07.2006
http://php.net/manual/en/book.ftp.php

http://www.softtime.ru/bookphp/gl9_2.php
http://svdpro.info/page.php?id=91
http://wm-help.net/articles/article/23.01.20067869-3.html
Абсолютно всё - первые ссылки в гугле.

Халявщики ничего не получат. За вас кодик писать никто не будет. Тут надо, миниммум, показывать что вы уже написали и что не получается.

Но для начала - читайте ссылки!
52K
18 сентября 2010 года
lexandr
26 / / 16.07.2010
стерто
64K
18 сентября 2010 года
Carvolan
2 / / 18.09.2010
Вы бы хоть написали, на каком языке программирования. Для перла use Net::FTP и в путь
61K
19 сентября 2010 года
tonechka
11 / / 16.09.2010
на РНР. Ссылки почитала, толком ничего не нашла, чтобы это реализовать.
2
19 сентября 2010 года
squirL
5.6K / / 13.08.2003
Цитата: tonechka
на РНР. Ссылки почитала, толком ничего не нашла, чтобы это реализовать.


зачем вы врете? ничего вы не читали. читали бы - нашли бы по первой же ссылке готовый пример.

61K
19 сентября 2010 года
tonechka
11 / / 16.09.2010
Цитата: squirL
зачем вы врете? ничего вы не читали. читали бы - нашли бы по первой же ссылке готовый пример.




Может вы для начала прекратите оскорблять!!!! я здесь чтоб умные люди помогли, а не сидели всякие ветераны и оскорбляли!!! Я только начинаю на php писать, и мне трудно разобраться!!! говорю же что получается соединится с сервером и авторизоваться, а как вот обойти папки и также их скопировать не могу!!!!

61K
19 сентября 2010 года
tonechka
11 / / 16.09.2010
Вот я взяла в инете функцию, но на фтп она не работает, а просто на локальном компе работает!!!

function coping($dirname,$dirdestination)
{
// Открываем директорию
$dir = opendir($dirname);
// В цикле выводим её содержимое
while (($file = readdir($dir)) !== false)
{
echo $file."<br>";
// Вырезаем первую точку
// Если это файл копируем его
if(is_file($dirname."/".$file))
{
copy($dirname."/".$file, $dirdestination."/".$file);
}
// Если это директория - создаём её
if(is_dir($dirname."/".$file) &&
$file != "." &&
$file != "..")
{
// Создаём директорию
if(!mkdir($dirdestination."/".$file))
{
echo "Can't create ".$dirdestination."/".$file."\n";
}
// Вызываем рекурсивно функцию lowering
lowering("$dirname/$file","$dirdestination/$file");
}
}
// Закрываем директорию
closedir($dir);
}
244
19 сентября 2010 года
UAS
2.0K / / 19.07.2006
Ну а если подумать? Вы применяете функции для работы с локальной системой, а не с удаленной по ftp.
Естественно надо использовать это при помощи ftp-функций.

Делаете функцию, например ftp_recursive_copy($conn_id, $directory)
Где $conn_id ресурс, указывающий на открытое соедение (через ftp_connect), а $directory - стартовая папка, откуда копирование будет рпоисходит.
Далее получаем список файлов и папок в $directory с помощью функции ftp_nlist.
Затем проходите циклом по полученному массиву (получаем из ftp_nlist). Если это файл, то копируете его к себе с помощью ftp_get($conn_id, $directory.'/'.<имя файла>, $directory.'/'.<имя файла>. Если же это папка, то вызываем заново функцию ftp_recursive_copy($conn_id, $directory.'/'.<имя папки>).

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

P.S.: кстати, товарищ squirL вас не оскорблял.
61K
20 сентября 2010 года
tonechka
11 / / 16.09.2010
Спасибо большое!!! я попробую реализовать!! и отпишусь обязательно о своих успехах или неудачах!!!
61K
20 сентября 2010 года
tonechka
11 / / 16.09.2010
Вот что у меня получилось.
Функция работает только с корневой папкой, а вот вложенные каталоги и файлы она не копирует. Так как рекурсивный вызов функции зацикливает процесс.
Может кто подскажет, что не так делаю.
Код:
$local_dir="D:/out";// директория, куда копируем
    $directory=""; // корневая папка фтп
    //функция по копированию файлов и каталого с фтп на локальный комп
    function copy_ftp($connect, $local_dir, $directory)
    {
        global $connect;
        //узнаем какие файлы находятся в каталоге
        $site = ftp_nlist($connect, "");
        //в цикле перебираем файлы
        foreach ($site as $value)
        {
           //если размер не равен -1, то это файл
           if(ftp_size($connect, $value)!=-1)
           {
           $copy=@ftp_get($connect, $local_dir."/".$value, $value,  FTP_ASCII);
                   }
                   // иначе это каталог
           else
           mkdir($local_dir."/".$value);
              copy_ftp($connect, $local_dir.'/'.$value, $directory.'/'.$value
       }
}
61K
21 сентября 2010 года
tonechka
11 / / 16.09.2010
<?php
error_reporting(E_ALL);

//соединение с сервером
$host = "ftp.ru";
$connect = ftp_connect($host);
if(!$connect)
{
echo("Ошибка соединения");
exit;
}
else
{
echo("Соединение установлено");
}
//авторизация
$user = "test2";
$password = "1234";
$result = ftp_login($connect, $user, $password);
if(!$result)
{
echo("Ошибка авторизации");
exit;
}
else
{
echo("Авторизация прошла успешно");
}

$dir_remote="";//откуда копирую
$dir_local="D:/222";//куда

function ftp_recursive_copy($connect, $dir_remote)
{
echo ftp_pwd($connect);
$site = ftp_nlist($connect,$dir_remote);//для всех файлов цикл

foreach ($site as $value)
{

if (($value == '.') or ($value == '..')) continue;

if (ftp_size($connect, $value)!=-1) //если файл
{
@ftp_get($connect,$dir_local.'/'.$value,$dir_remote.'/'.$value, FTP_ASCII);//копирую его в новую папку

}
else
{
mkdir($dir_local.'/'.$value);
ftp_chdir($connect, $value);
$new_path=ftp_pwd($connect);
echo $new_path;
ftp_recursive_copy($connect, $new_path);//если папка, то снова вызываю функцию
}
}
}

ftp_recursive_copy($connect,$dir_remote);
?>

Когда пытаюсь в самом начале проверить папку где нахожусь, он мне выдает, самую последнюю по глубине, а не первую, почему??? В чем у меня ошибки??
244
21 сентября 2010 года
UAS
2.0K / / 19.07.2006
Код оформите + читайте сообщения об ошибках, которые точно будут.
Например $dir_local в функции не будет видна + юзайти FTP_BINARY + $value возвращает полный путь до файла, а не относительно текущей папки.
61K
21 сентября 2010 года
tonechka
11 / / 16.09.2010
Когда сообщения об ошибках бывают, я их исправляю! а на данном этапе, он ничего не выдает!!!! Но и не работает))))
244
21 сентября 2010 года
UAS
2.0K / / 19.07.2006
Я запустил - у меня выдает ошибки. Ошибка есть, то что вы её не видите, не значит, что она есть. Уберите @ перед ftp_get и всё увидете.
15
21 сентября 2010 года
shaelf
2.7K / / 04.05.2005
Да, люди забавны)) Мало того, что начиная изучать программирование сразу берутся за клиент серверные программы, так ещё и возмущаются, когда им указыают на ихнее нежелание что-то делать и при этом игнорят чужой труд (тут есть правила, которые желательно читать перед первым постом).
ЗЫ Сорь за почти оффтоп.
244
21 сентября 2010 года
UAS
2.0K / / 19.07.2006
Что-то то Вас, товарищ shaelf, давно не было видно =)
И вы явно в хорошем расположении духа)))
15
21 сентября 2010 года
shaelf
2.7K / / 04.05.2005
Да вот, заглянул))) Всё дела, да дела... Да и с php плавно переползал на флеш :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог