Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2018, 17:00   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию Скачивание файла с FTP-сервера

Здравствуйте, мне нужно реализовать скачивание файла с FTP-сервера.
Вот как я пытаюсь сделать:
Файл подключения:
Код:
<?php

$ftp_server = "192.168.100.5";					//IP
$ftp_user_name = "Admin";						//Логин
$ftp_user_pass = "qwerty12345";				//Пароль
$paths = "../FTPFILES";                              //Путь к FTP каталогу

$conn_id = ftp_connect($ftp_server);
// включение пассивного режима
ftp_pasv($conn_id, true);
// входим при помощи логина и пароля
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// включение пассивного режима

// проверяем подключение
if ((!$conn_id) || (!$login_result)) {
       echo "FTP connection has failed!";
       echo "Attempted to connect to $ftp_server for user: $ftp_user_name";
       exit;
   } else {
        echo "Connected to $ftp_server, for user: $ftp_user_name"; 
       
   }
   
   ?>
Скрипт для скачивания:
Код:
// открыть файл для записи
$file = $FileName;
$fp = fopen($file, 'w');


// Начало скачивания
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {

   // продолжение скачивания ...
   $ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
   echo "При скачивании файла произошла ошибка...";
   exit(1);
}

// закрытие файла
fclose($fp);
Но к сожалению, ничего не скачивается.
Есть подозрение что я вообще использую не ту функцию. Знающие люди, подскажите)
Kef1r вне форума Ответить с цитированием
Старый 12.01.2018, 17:04   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

http://phpfaq.ru/debug
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2018, 17:09   #3
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Это я уже научился делать) Ошибок абсолютно никаких нет.
Kef1r вне форума Ответить с цитированием
Старый 12.01.2018, 17:11   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну дык отладчик используйте или var_dump все подряд.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.01.2018, 17:29   #5
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Сделал var_dump на все подряд. Ничего подозрительного не увидел.
Хотя
Код:
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY);
var_dump ($ret);
Возвращает 2(просто число 2). Хотя в мануале написано что Возвращает FTP_FAILED, FTP_FINISHED или FTP_MOREDATA.
Что это может значить?
Kef1r вне форума Ответить с цитированием
Старый 12.01.2018, 17:45   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

1) приведите весь скрипт целиком

2) что в переменной $FileName (и оно же в $file) ? уверены, что файл с таким именем есть на FTP ?

3) объявлена и заполнена переменная $paths = "../FTPFILES";
для чего и где она используется?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2018, 17:48   #7
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Скрипт целиком
Код:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

require_once '../connection.php';
require_once '../ftp.php';




if (isset($_POST['filenameclass'])&& !empty($_POST['filenameclass']) && isset($_POST['id']) &&!empty($_POST['id'])){
    $ID=intval($_POST['id']);
    $FileName=$_POST['filenameclass'];
    
// открыть файл для записи
$file = $FileName;
$fp = fopen($file, 'w');


// Начало скачивания
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {

   // продолжение скачивания ...
   $ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
   echo "При скачивании файла произошла ошибка...";
   exit(1);
}

// закрытие файла
fclose($fp);

}else{
    echo "Параметры не переданы";
}

?>
в $FileName наименование файла, который нужно скачать. Такой файл абсолютно точно имеется на сервере.

$paths используется для загрузки файлов на FTP-сервер(эту функцию я уже реализовал). Соответственно "../FTPFILES" - каталог, в который загружаются файлы.

Последний раз редактировалось Kef1r; 12.01.2018 в 18:24.
Kef1r вне форума Ответить с цитированием
Старый 12.01.2018, 19:50   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
в $FileName наименование файла, который нужно скачать
Согласно мануала, третьим аргументом функции ftp_nb_fget должен быть путь к удалённому файлу – а не просто его наименование.
Andkorol вне форума Ответить с цитированием
Старый 12.01.2018, 20:11   #9
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Согласно мануала, третьим аргументом функции ftp_nb_fget должен быть путь к удалённому файлу – а не просто его наименование.
Сделал так:
Код:
$file = $paths."/".$FileName;
Теперь файл оно находит, но проблемка в том, что не скачивает и удаляет из него все данные. Очень странно. В чем может быть дело?
Kef1r вне форума Ответить с цитированием
Старый 12.01.2018, 20:24   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Сделал так:
Код:
$file = $paths."/".$FileName;
Теперь файл оно находит, но проблемка в том, что не скачивает и удаляет из него все данные. Очень странно. В чем может быть дело?
$fp = fopen($file, 'w'); – здесь $file это путь к локальному файлу.
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY); – здесь $file это путь к удалённому файлу, на сервере.
Сомневаюсь, что локальная структура расположения каталогов и файлов точно соответствует структуре на удаленном сервере.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка на сервер /скачивание с сервера файла LittleG PHP 9 09.03.2017 02:36
удаление файла c ftp сервера Lokos JavaScript, Ajax 8 01.07.2014 04:40
Библиотека BytesRoad.Net.FTP.dll для работы с FTP: как реализовать докачку файла E_x C# (си шарп) 2 18.12.2012 14:15
Скачивание-закачивание файлов с сервера и на сервер ЖенёкСупер Работа с сетью в Delphi 10 09.06.2010 18:42
скачивание файлов с FTP L.Morgan Работа с сетью в Delphi 2 14.04.2009 10:14