Помогите пли с ftp
кодик, который будет брать с сервера определенную папку (например по названию), и все что есть в ней(все вложенные папки,
вложенные в них папки, файлы и т.п.) копировать в другое место, которое я ему укажу... ПОМОГИТЕ плиз написсать... до меня пока
доходит только как соединится с сервером и авторизоваться, и как просто сохранить с фтп файл по имени... но это не то....Напишите
кто нить хоть примерный кодик!!!
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
Абсолютно всё - первые ссылки в гугле.
Халявщики ничего не получат. За вас кодик писать никто не будет. Тут надо, миниммум, показывать что вы уже написали и что не получается.
Но для начала - читайте ссылки!
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
Абсолютно всё - первые ссылки в гугле.
Халявщики ничего не получат. За вас кодик писать никто не будет. Тут надо, миниммум, показывать что вы уже написали и что не получается.
Но для начала - читайте ссылки!
стерто
Вы бы хоть написали, на каком языке программирования. Для перла use Net::FTP и в путь
на РНР. Ссылки почитала, толком ничего не нашла, чтобы это реализовать.
Цитата: tonechka
на РНР. Ссылки почитала, толком ничего не нашла, чтобы это реализовать.
зачем вы врете? ничего вы не читали. читали бы - нашли бы по первой же ссылке готовый пример.
Цитата: squirL
зачем вы врете? ничего вы не читали. читали бы - нашли бы по первой же ссылке готовый пример.
Может вы для начала прекратите оскорблять!!!! я здесь чтоб умные люди помогли, а не сидели всякие ветераны и оскорбляли!!! Я только начинаю на php писать, и мне трудно разобраться!!! говорю же что получается соединится с сервером и авторизоваться, а как вот обойти папки и также их скопировать не могу!!!!
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);
}
Естественно надо использовать это при помощи 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 вас не оскорблял.
Спасибо большое!!! я попробую реализовать!! и отпишусь обязательно о своих успехах или неудачах!!!
Функция работает только с корневой папкой, а вот вложенные каталоги и файлы она не копирует. Так как рекурсивный вызов функции зацикливает процесс.
Может кто подскажет, что не так делаю.
Код:
$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
}
}
$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
}
}
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);
?>
Когда пытаюсь в самом начале проверить папку где нахожусь, он мне выдает, самую последнюю по глубине, а не первую, почему??? В чем у меня ошибки??
Например $dir_local в функции не будет видна + юзайти FTP_BINARY + $value возвращает полный путь до файла, а не относительно текущей папки.
Когда сообщения об ошибках бывают, я их исправляю! а на данном этапе, он ничего не выдает!!!! Но и не работает))))
Я запустил - у меня выдает ошибки. Ошибка есть, то что вы её не видите, не значит, что она есть. Уберите @ перед ftp_get и всё увидете.
ЗЫ Сорь за почти оффтоп.
И вы явно в хорошем расположении духа)))
Да вот, заглянул))) Всё дела, да дела... Да и с php плавно переползал на флеш :)