Этот вопрос соответствует этому вопросу , я пытаюсь подключиться к защищенному FTP-серверу, и он не может подключиться, странным является то, что я могу сделать ssh и подключиться к серверу но когда я пытаюсь сделать это из PHP-кода, используя несколько разных подходов, но он не работает
Подходы:
- FTP Wrappers
ftp_connect
& ftp_login
ftp_ssl_connect
ssh2_sftp
ssh2-scp-send
& ssh2-scp-receive
- еще не пробовали этот подход, но рекомендовали его в комментариях, поэтому будем работать над этим и будут публиковать обновления позже.
Код для подхода 1:
$ftp_server = "ftp://username:password@192.168.1.1:21/{$log_file_name}";
$opts = array('ftp' => array('overwrite' => TRUE));
$context = stream_context_create($opts);
$put_file = file_put_contents($ftp_server, $response, LOCK_EX,$context);
Здесь также не удается подключиться к защищенному FTP-серверу, есть предложения относительно того, почему он не может подключиться?
Код для подхода 2:
ftp_server = 'www.server.com';
$conn_id = ftp_connect($ftp_server) or die ("Cannot connect to host");
//Program dies out here and give error message "Cannot connect to host",
//but why ftp_login does not work here, Any Suggestions ?
$ftp_user_name = "login";
$ftp_user_pass = "password";
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection and login result
if ((!$conn_id) || (!$login_result))
{ echo "FTP connection has encountered an error!";
echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
//exit;
} else
{
echo "Connected to $ftp_server, for user $ftp_user_name".".....";
}
Код для подхода 3:
Here am using same code as approach 1 but instead of ftp_connect, am using ftp_ssl_connect
Код для подхода 4:
$connection = ssh2_connect('www.server.com', 22);
ssh2_auth_password($connection, 'login', 'password');
$sftp = ssh2_sftp($connection);
//exit();
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
Может кто-нибудь посоветовать, почему я не могу подключиться к защищенному FTP-серверу, используя вышеуказанные подходы, но все еще могу сделать это с помощью ssh?
Существуют ли другие способы подключения к защищенному FTP-серверу с использованием php?
ОБНОВЛЕНИЕ:
Q1. Я попытался снова с помощью ftp_connect, но он просто вымер и почему он вымирает, в каких сценариях вымирает ftp_connect?
Q2. У нас есть только один подход для подключения к серверу или есть какие-то другие, которые мы можем реализовать?
Q3. Связан ли этот язык php с тем, что он не поддерживает безопасное FTP-соединение? ИЛИ есть какой-то другой способ сделать это с помощью php, если да, чем предоставить другие подходы, поскольку это было бы очень полезно.
ОБНОВЛЕНИЕ 1:
Я пытался больше гуглить по этому вопросу, и кажется, что если ftp_connect не работает, то брандмауэр может быть одной из причин этого. Я не совсем уверен, так ли это, но я больше изучаю его и выкладываю здесь обновления, если найду что-нибудь полезное.
Возможное решение:
Проблема
Если я уберу «или умру», вы получите ошибку:
При запуске с веб-страницы:
Предупреждение: ftp_login () ожидает, что параметр 1 будет ресурсом, логическое значение указано в /var/www/ftp_test.php в строке 28
var_dump ($ conn_id); возвращает bool (false).
Из командной строки / usr / bin / php /var/www/ftp_test.php
var_dump ($ conn_id); возвращает ресурс (4) типа (буфер FTP).
Сценарий завершен.
Решение 1
Это может быть один solution
:
Попробуйте отключить selinux
и вот way
или Поиск: Как отключить selinux для его временного или постоянного отключения.
Решение 2
Если вы не хотите полностью отключать selinux, вы можете получить то, что вам нужно, просто установив httpd_can_network_connect с помощью команды setsebool .
Убедитесь, что ранее было установлено значение "off":
getsebool httpd_can_network_connect
Установите его в «on»:
setsebool httpd_can_network_connect=1
Включите selinux снова:
Setenforce 1
Убедитесь, что php ftp_connect
все еще работает при работе под httpd.
Установите для политики (-P) значение «on», чтобы оно сохранялось при перезагрузке:
setsebool -P httpd_can_network_connect=1
Решение 3
Также может быть проблема с брандмауэром компании. Убедитесь, что он настроен правильно и права доступа установлены правильно.
Решение 4
Другой подход заключается в использовании cURL: libcurl , поскольку его можно использовать для подключения и связи со многими различными типами серверов с множеством различных типов протоколов
Решение 5
Существует проект с открытым исходным кодом, называемый PHP Secure Communication Library (phpspeclib) , который также можно использовать для установления безопасного соединения с FTP-сервером.