Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.01.2018, 18:00   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию Скачивание файла с 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, 18:04   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,010
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

http://phpfaq.ru/debug
Alex11223 вне форума   Ответить с цитированием
Старый 12.01.2018, 18:09   #3
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Это я уже научился делать) Ошибок абсолютно никаких нет.
Kef1r вне форума   Ответить с цитированием
Старый 12.01.2018, 18:11   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,010
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

Ну дык отладчик используйте или var_dump все подряд.
Alex11223 вне форума   Ответить с цитированием
Старый 12.01.2018, 18:29   #5
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 110
Репутация: 10
По умолчанию

Сделал 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, 18:45   #6
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,620
Репутация: 5213
По умолчанию

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

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

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

Скрипт целиком
Код:

<?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 в 19:24.
Kef1r вне форума   Ответить с цитированием
Старый 12.01.2018, 20:50   #8
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,243
Репутация: 1047
По умолчанию

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

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Согласно мануала, третьим аргументом функции ftp_nb_fget должен быть путь к удалённому файлу – а не просто его наименование.
Сделал так:
Код:

$file = $paths."/".$FileName;

Теперь файл оно находит, но проблемка в том, что не скачивает и удаляет из него все данные. Очень странно. В чем может быть дело?
Kef1r вне форума   Ответить с цитированием
Старый 12.01.2018, 21:24   #10
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 3,243
Репутация: 1047
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Сделал так:
Код:

$file = $paths."/".$FileName;

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка на сервер /скачивание с сервера файла LittleG PHP 9 09.03.2017 03: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


17:00.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru