Как подключиться к серверу по FTP через скрипт PHP

Я пытаюсь получить файл в определенном каталоге на сервере A из сеанса браузера на сервере B, используя функцию PHP ftp_connect().

IP-адрес сервера B внесен в белый список на сервере A.

Когда я запускаю сценарий, я получаю сообщение «Не удалось подключиться к 123.123.123.123».

Вот мой сценарий:

<?php
$ftp_host = "123.123.123.123"; // real IP Address masked
$ftp_port = "22";
$ftp_conn = ftp_connect($ftp_host,$ftp_port) or die("Could not connect to $ftp_host");
echo 'connection success'; exit;

Почему это не сработает? Есть ли лучший способ получить файл с помощью PHP?

Вот результаты «повторяющегося» вопроса и ответов - они не работают:

  1. $ connection = ssh2_connect ('123.123.123.123', 22); Результат: Неустранимая ошибка: вызов неопределенной функции ssh2_connect () в ...
  2. file_get_contents ('ssh2.sftp: // user: [email protected]: 22 / path / to / filename'); Результат в предупреждении: file_get_contents (): не удалось найти оболочку "ssh2.sftp" - вы забыли включить ее при настройке PHP?

Мне интересно, удалось ли кому-нибудь установить FTP-соединение с сервером с использованием PHP, когда у вас есть проверенное и действительное имя пользователя, пароль, хост и порт.

Если да, расскажите, как вам это удалось?

Резюме 03.10.2018 и объяснение моей цели Вот что мне нужно сделать:

  1. На хост-сервере есть файл, который обновляется и обслуживается мне каждый день недели из хост-центра обработки данных.
  2. Хост-центр обработки данных внес IP-адрес моего сервера в белый список.
  3. Я успешно вошел на сервер центра обработки данных хоста через Sublime Text 3 с настройками type = sftp, host = (IP-адрес сервера центра обработки данных хоста), port = 22, username = (имя пользователя, которое они мне дали), password = (пароль, который они мне дали) , remote_path = (путь, который они мне дали.)
  4. Я не хочу вручную входить на сервер и физически извлекать файл данных для использования на моем сайте - я хочу сделать это программно через PHP (или даже bash, как кто-то предложил).

Я открыт для любой помощи или идей, если это было сделано успешно.

Задача решена!

Чтобы использовать функцию ssh2_connect(), вам необходимо установить и активировать PHP SSH2 extension. Из всех моих копаний, поисков в Google и исследований нигде не было заявлено, что расширение неактивно с PHP (из коробки), и никто не упомянул, что его необходимо установить и активировать. Но теперь мы знаем :) Надеюсь, это вам поможет!

FYI: FTP устанавливает соединения два между клиентом и сервером, одно на порту 22 для команд, а второе на произвольном порту для данных. Если вы не проделали нужные дыры в FW для подключения к данным или задействован шлюз NAT, вы не сможете подключиться.

Sammitch 02.10.2018 23:05

FTP не подключен к порту 22.

miken32 02.10.2018 23:07

Порт 22 предназначен для SSH / SFTP, а не для FTP.

Martin Prikryl 02.10.2018 23:13

Спасибо за ответ @MichaelBerkowski. Да, особенность заключается в том, что я могу без проблем использовать FTP из моей Sublime Text IDE на сервер. Фактически, IP-адрес, с которого я использую FTP в Sublime, принадлежит моему интернет-провайдеру, а не тот, который хост-центр обработки данных внес в белый список. Что касается остальной части комментария, что конкретно я могу спросить у хост-центра обработки данных?

sme1 03.10.2018 00:35

Спасибо, @Sammitch. Хост-центр данных специально проинструктировал меня использовать порт 22, который я использовал в Sublime Text 3, и могу подключиться. Мой PHP-скрипт не подключается через порт 22 и даже не пытается использовать порт 21.

sme1 03.10.2018 00:42

Сообщите мне, какой "повторяющийся" вопрос содержит ответ на эту проблему @MartinPrikryl. Спасибо! Я с нетерпением жду ответа и заставлю это работать. С наилучшими пожеланиями.

sme1 03.10.2018 00:43

вам, вероятно, следует использовать что-то вроде bash, PHP не идеален для этого

meda 03.10.2018 00:56

Спасибо @meda. Вы когда-нибудь делали это в bash? Как выглядит код, чтобы сделать это в bash? И когда вы говорите «PHP не идеален для этого», означает ли это, что это невозможно сделать, а PHP не может этого сделать? Почему в PHP есть такие функции, как ftp_connect () и т. д.?

sme1 03.10.2018 00:59

ха-ха, вот он, совсем не тот порт. :П

Sammitch 03.10.2018 01:42

Если он не работает на порте 22 или 21 @ Sammitch, какой порт правильный? Хост-центр данных сказал мне использовать порт 22. Порт 22 работает в Sublime Text.

sme1 03.10.2018 03:39

Вы хотите подключиться к порту 22 =>, следовательно, вам нужно использовать SFTP, а не FTP. Таким образом, вы не можете использовать ftp_connect. Вам необходимо использовать функции SFTP. Ответы на связанный дублирующий вопрос покажут, как это сделать.

Martin Prikryl 03.10.2018 07:27

@meda Я не понимаю, почему OP должен вызывать оболочку для этого из сценария PHP, если PHP имеет встроенную поддержку SFTP.

Martin Prikryl 03.10.2018 07:36

Вчера я внес поправки в свой OQ после попытки ответить на «повторяющиеся» вопросы @MartinPrikryl. Они не работают.

sme1 03.10.2018 11:20

Во-первых, вам нужно выяснить, хотите ли вы FTP или SFTP. Заявление о том, что функции SFTP не работают для вас, при этом все еще настаивая на использовании FTP, делает ваш вопрос еще более запутанным, чем это было раньше.

Martin Prikryl 03.10.2018 11:23

Я буду использовать тот метод, который работает @MartinPrikryl, чтобы программно получить файл данных. В другой раз я внес поправки в свой OQ, чтобы еще раз сформулировать свои цели. Я признателен вам за любую практическую помощь, которой можете поделиться со мной вы или другие, кому удалось это сделать :) Спасибо!

sme1 03.10.2018 11:41

Итак, вы говорите: «Я успешно вошел на сервер центра обработки данных через Sublime Text 3 с типом настроек = ** sftp **» - но вы продолжаете спрашивать о FTP - это два совершенно не связанных между собой протокола. - Попробуйте другие методы использования SFTP, предложенные в повторяющемся вопросе, особенно phpseclib. Или установите модуль PHP SSH2.

Martin Prikryl 03.10.2018 13:26

Проблема решена - см. Мою поправку к OQ.

sme1 03.10.2018 17:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
17
63
0

Другие вопросы по теме