Этот вопрос соответствует этому вопросу, я пытаюсь подключиться к защищенному 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:[email protected]: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:
Я пытался больше поработать с Google, и кажется, что если ftp_connect не работает, это может быть причиной для брандмауэра. Я не совсем уверен, если это так, но я больше изучаю его и публикую здесь обновление, если найду что-нибудь полезное.
Возможное решение:
Проблема
Если я удалю "или умереть", вы получите сообщение об ошибке:
При запуске с веб-страницы: Msgstr "Предупреждение: ftp_login() ожидает, что параметр 1 будет ресурсом, boolean задан в /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-буфер).
Script завершается.
Решение 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-серверу.
Комментарии:
Я пробовал делать google/bing, но не получил каких-либо плодотворных результатов, и, конечно же, буду ценить, если SO Readers могут помочь: -)
Я действительно жду ответа.