Я пытаюсь получить файл в определенном каталоге на сервере 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?
Вот результаты «повторяющегося» вопроса и ответов - они не работают:
Мне интересно, удалось ли кому-нибудь установить FTP-соединение с сервером с использованием PHP, когда у вас есть проверенное и действительное имя пользователя, пароль, хост и порт.
Если да, расскажите, как вам это удалось?
Резюме 03.10.2018 и объяснение моей цели Вот что мне нужно сделать:
Я открыт для любой помощи или идей, если это было сделано успешно.
Задача решена!
Чтобы использовать функцию ssh2_connect(), вам необходимо установить и активировать PHP SSH2 extension. Из всех моих копаний, поисков в Google и исследований нигде не было заявлено, что расширение неактивно с PHP (из коробки), и никто не упомянул, что его необходимо установить и активировать. Но теперь мы знаем :) Надеюсь, это вам поможет!
FTP не подключен к порту 22.
Порт 22 предназначен для SSH / SFTP, а не для FTP.
Спасибо за ответ @MichaelBerkowski. Да, особенность заключается в том, что я могу без проблем использовать FTP из моей Sublime Text IDE на сервер. Фактически, IP-адрес, с которого я использую FTP в Sublime, принадлежит моему интернет-провайдеру, а не тот, который хост-центр обработки данных внес в белый список. Что касается остальной части комментария, что конкретно я могу спросить у хост-центра обработки данных?
Спасибо, @Sammitch. Хост-центр данных специально проинструктировал меня использовать порт 22, который я использовал в Sublime Text 3, и могу подключиться. Мой PHP-скрипт не подключается через порт 22 и даже не пытается использовать порт 21.
Сообщите мне, какой "повторяющийся" вопрос содержит ответ на эту проблему @MartinPrikryl. Спасибо! Я с нетерпением жду ответа и заставлю это работать. С наилучшими пожеланиями.
вам, вероятно, следует использовать что-то вроде bash, PHP не идеален для этого
Спасибо @meda. Вы когда-нибудь делали это в bash? Как выглядит код, чтобы сделать это в bash? И когда вы говорите «PHP не идеален для этого», означает ли это, что это невозможно сделать, а PHP не может этого сделать? Почему в PHP есть такие функции, как ftp_connect () и т. д.?
ха-ха, вот он, совсем не тот порт. :П
Если он не работает на порте 22 или 21 @ Sammitch, какой порт правильный? Хост-центр данных сказал мне использовать порт 22. Порт 22 работает в Sublime Text.
Вы хотите подключиться к порту 22 =>, следовательно, вам нужно использовать SFTP, а не FTP. Таким образом, вы не можете использовать ftp_connect. Вам необходимо использовать функции SFTP. Ответы на связанный дублирующий вопрос покажут, как это сделать.
@meda Я не понимаю, почему OP должен вызывать оболочку для этого из сценария PHP, если PHP имеет встроенную поддержку SFTP.
Вчера я внес поправки в свой OQ после попытки ответить на «повторяющиеся» вопросы @MartinPrikryl. Они не работают.
Во-первых, вам нужно выяснить, хотите ли вы FTP или SFTP. Заявление о том, что функции SFTP не работают для вас, при этом все еще настаивая на использовании FTP, делает ваш вопрос еще более запутанным, чем это было раньше.
Я буду использовать тот метод, который работает @MartinPrikryl, чтобы программно получить файл данных. В другой раз я внес поправки в свой OQ, чтобы еще раз сформулировать свои цели. Я признателен вам за любую практическую помощь, которой можете поделиться со мной вы или другие, кому удалось это сделать :) Спасибо!
Итак, вы говорите: «Я успешно вошел на сервер центра обработки данных через Sublime Text 3 с типом настроек = ** sftp **» - но вы продолжаете спрашивать о FTP - это два совершенно не связанных между собой протокола. - Попробуйте другие методы использования SFTP, предложенные в повторяющемся вопросе, особенно phpseclib. Или установите модуль PHP SSH2.
Проблема решена - см. Мою поправку к OQ.






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