Соединение для обеспечения FTP-сервера от PHP

Этот вопрос соответствует этому вопросу, я пытаюсь соединиться с безопасным FTP-сервером, и он не может соединиться, странная часть - то, что я могу сделать ssh и подключение к серверу, но когда я пытаюсь сделать это из кода php с помощью немногих разных подходов, но он не работает

Подходы:

  1. Обертки FTP
  2. ftp_connect & ftp_login
  3. ftp_ssl_connect
  4. ssh2_sftp
  5. 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 (ложь).

Из командной строки/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.

Проверьте, что это было ранее установлено на "прочь": getsebool httpd_can_network_connect

Установите его на "на":

setsebool httpd_can_network_connect=1

Снова включите selinux: setenforce 1

Проверьте, чтобы быть уверенными php ftp_connect все еще работы при выполнении под httpd.

Установите политику (-P) на "на" том, таким образом, она сохраняется по перезагрузке:

setsebool -P httpd_can_network_connect=1

Решение 3

Могла также быть проблема с брандмауэром компании. Удостоверьтесь, что это настроено правильно и установило права доступа правильно.

Решение 4

Другой подход должен использовать ЗАВИХРЕНИЕ: libcurl, поскольку это может использоваться, чтобы соединиться и связаться со многими различными типами серверов со многими различными типами протоколов

Решение 5

Существует проект с открытым исходным кодом под названием PHP Безопасная Коммуникационная Библиотека (phpspeclib), который может также использоваться для установления безопасного соединения с FTP-сервером.

13
задан 14 revs, 2 users 92% 13 February 2018 в 16:07
поделиться

2 ответа

Эта страница имеет то, что вы ищете (я думаю)

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/

и вот ручные страницы

http://php.net/manual/en/book.ssh2.php

1
ответ дан 2 December 2019 в 02:18
поделиться

Я тоже столкнулся с довольно много вопросов при работе с зашифрованными соединениями.

Первое, что нужно проверить протокол, который вы ищете использовать. Безопасный FTP наиболее часто перерабатывается на FTP через SHH, но также может означать SCP, SFTP или FTPS.

Один из способов выяснить, это проверить соединение с помощью клиента, такого как Filezilla.

Если протокол обрабатывается через модуль PHP, лучший подход действительно, использовать его. В этом случае необходимо убедиться, что, в дополнение к одному, связанному протоколу, модуль OpenSSL устанавливается для PHP.

Есть некоторые случаи, когда модуль поддерживает еще не будет работать. В этом случае используя модуль libcurl - это один вариант. Это так, например, когда вам нужно использовать клиентский сертификат.

К сожалению, здесь снова вы можете столкнуться с некоторыми проблемами из-за частичной поддержки libcurl в модуле PHP. Один сценарий, который я экспериментировал, когда сертификат сервера оценивается недействительным модулем.

Последнее решение, которое я обычно использую, состоит в том, чтобы запустить двоичное двоичность из оператора EXEC, для более позднего случая с использованием коммутатора «-K».

0
ответ дан 2 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: