Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
main.c
26 / 26 / 7
Регистрация: 05.04.2012
Сообщений: 241
1

PHP и FTP-сервер

03.02.2015, 22:43. Просмотров 886. Ответов 4
Метки нет (Все метки)

Есть простой сценарий:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Подключение к хосту
  $conn = ftp_connect($host);
  if (!$conn) {
    echo 'Ошибка: соединение с FTP-сервером невозможно<br />';
    exit;
  }
  echo "Соединение с $host установлено<br />";
 
  // Регистрация на хосте
  $result = @ftp_login($conn, $user, $password);
  if (!$result) {
    echo "Ошибка: пользователь $user не зарегистрирован<br />";
    ftp_quit($conn);
    exit;
  }
  echo "Начало сеанса пользователя $user<br />";
 
  // Проверка времени модификации файла — следует ли его обновлять
  echo 'Проверка времени модификации файла...<br />';
  if (file_exists($localfile)) {
    $localtime = filemtime($localfile);
    echo 'Последняя модификация локального файла: ';
    echo date('G:i j-M-Y', $localtime);
    echo '<br />';
  } else {
    $localtime = 0;
  }
  $remotetime = ftp_mdtm($conn, $remotefile);
  if (!($remotetime >= 0)) {
    // Это не значит, что файл не существует,
    // сервер может не поддерживать время модификации
    echo 'Невозможно получить время модификации удаленного файла.<br />';
    $remotetime = $localtime+1;  // чтобы обновление выполнилось
  } else {
    echo 'Последняя модификация удаленного файла: ';
    echo date('G:i j-M-Y', $remotetime);
    echo '<br />';
  }
  if (!($remotetime > $localtime)) {
    echo 'Локальная копия актуальна.<br />';
    exit;
  }
 
  // Загрузка файла
  echo 'Чтение файла с сервера...<br />';
  $fp = fopen ($localfile, 'w');
  if (!ftp_fget($conn, $fp, $remotefile, FTP_BINARY)) {
    echo 'Ошибка: невозможно загрузить файл';
    ftp_quit($conn);
    exit;
  }
  fclose($fp);
  echo 'Файл успешно загружен';
 
  // Закрытие соединения с хостом
  ftp_quit($conn);
Вот что выводит браузер:
0
Миниатюры
PHP и FTP-сервер  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 22:43
Ответы с готовыми решениями:

Php и FTP-сервер
Уважаемые!мучаюсь с проблемой не один день,прошу помочь. Есть ФТП-сервер...

Сервер на php (клиент сервер)
делаю клиент сервер для программы на андроид...

Html + php + ftp sertver. Как?
Ребят вопрос! Пишу обычную форму для отправки письма html + php . после кидаю...

удаление файлов ftp curl php
$content = CURL_FTP($url, 0, 0); $arr = explode(&quot;\r\n&quot;, $content);...

нужно найти программу для работы с сайтом на PHP по FTP
Решил перейти на ubuntu. Приходится часто работать с сайтами. В винде делал это...

4
main.c
26 / 26 / 7
Регистрация: 05.04.2012
Сообщений: 241
04.02.2015, 13:34  [ТС] 2
Я с этого же компьютера подключался к этому FTP-серверу через стандартный графический интерфейс на Ubuntu и манипулировал файлами как в одну так и в другую сторону. В чём разница? Почему через скрипт не хочет работать?

Добавлено через 14 часов 30 минут
Да и вообще, он говорит мне, я не буду подключаться к 192.168.82.76 (только к 87.251.152.126), но если зайти на сюда мне говорят, что мой IP 87.251.152.126 . Как это понимать?

Добавлено через 16 минут
Кароче, проблема решается включением пассивного режима:
PHP
1
ftp_pasv($conn, true);
Я абсолютно не понимаю, что делает эта строчка, но после неё всё работает.
0
Tatikoma
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
258 / 222 / 109
Регистрация: 07.07.2014
Сообщений: 965
06.02.2015, 14:25 3
Лучший ответ Сообщение было отмечено main.c как решение

Решение

main.c, эта строчка включает пассивный режим =)

FTP не умеет получать файл в рамках основного соединения, - он для этого создает отдельное подключение, а для этого FTP умеет работать, грубо говоря, в двух режимах:
пассивный (PASV) - сервер сообщает IP:Port для подключения, куда подключается клиент
активный (PORT) - клиент сообщает IP:Port для подключения, куда подключается сервер

По-умолчанию большинство клиентов используют пассивный режим (т.к. иначе вы не сможете подключиться из-за NAT'а, если не открыть предварительно какой-то порт для этого), однако в вашем случае это почему-то не так. Включение пассивного режиме - корректное решение, никакого костыля вы не сделали, не переживайте =)

Соответственно в случае активного режима, - сервер вам сообщает что он как бы не особо хочет открывать соединение для IP 192.168.*, т.к. либо находится вне вашей локалки, либо не настроен для работы внутри локальной сети, либо просто активный режим запрещен.
1
main.c
26 / 26 / 7
Регистрация: 05.04.2012
Сообщений: 241
06.02.2015, 17:49  [ТС] 4
Цитата Сообщение от Tatikoma Посмотреть сообщение
FTP не умеет получать файл в рамках основного соединения, - он для этого создает отдельное подключение, а для этого FTP умеет работать, грубо говоря, в двух режимах:
пассивный (PASV) - сервер сообщает IP:Port для подключения, куда подключается клиент
активный (PORT) - клиент сообщает IP:Port для подключения, куда подключается сервер
А вот тут можно немного подробней? Хотелось бы разобраться в ключевых моментах работы с FTP-сервером.
1.
PHP
1
$conn = ftp_connect($host);
этой строчкой мы подключаемся к серверу, Вы можете объяснить мне что конкретно происходит на этом этапе? Ну к примеру, когда мы открываем файл, ОС открывает поток ввода-вывода, связанный с этим файлом, и возвращает нам файловый дескриптор этого потока. Потом мы уже по сути работаем с потоком. А что делается здесь? Чё-то я совсем не врубаюсь как тут всё происходит?
0
Tatikoma
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
258 / 222 / 109
Регистрация: 07.07.2014
Сообщений: 965
06.02.2015, 21:41 5
main.c, тут открывается TCP-соединение с компьютера на котором выполняется этот скрипт к компьютеру $host на порт 22.
0
06.02.2015, 21:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2015, 21:41

Сервер-клиент на PHP и JavaScript
Приветствую! Несмотря на всю открытость вопроса меня не покидает эта идея о...

Сервер Apache не работает PHP функция chmod
пытаюсь выполнить php команду chmod('путь до файла', '0775') она не...

PHP сервер для отправки push на приложение Android
Всем привет. В обще случилась такая ситуация: нужно подготовить проект...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru