Подключение к FTP-серверу с PHP

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

подходы:

  1. Флеш-упаковщики
  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:

Я пытался больше поработать с Google, и кажется, что если ftp_connect не работает, это может быть причиной того, что брандмауэр может быть причиной этого. Я не совсем уверен, если это так, но я больше изучаю его и публикую здесь обновление, если найду что-нибудь полезное.

Возможное решение :

проблема

Если я удалю «или умру», тогда вы получите сообщение об ошибке:

При запуске с веб-страницы: «Warning: 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 Buffer).

Скрипт завершен.

Решение 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) значение «включено», чтобы она сохранялась при перезагрузке: setsebool -P httpd_can_network_connect = 1

Решение 3

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

Решение 4

Другой подход заключается в использовании cURL: libcurl, поскольку он может использоваться для подключения и взаимодействия со многими различными типами серверов со многими различными типами протоколов

Решение 5

Существует открытый проект под названием PHP Secure Communication Library (phpspeclib), который также можно использовать для установления безопасного подключения к FTP-серверу.

Комментарии:

Я пробовал делать google / bing, но не получил каких-либо плодотворных результатов и поэтому, безусловно, оценил бы, если SO Readers могут помочь 🙂

Я действительно жду ответа.

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

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

и вот страницы руководства

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

Что касается'ftp через ssh 'alias'sftp': нет прямых советов, но обратите внимание, что многие дешевые веб-хосты без выделенного сервера не поддерживают его (что плохо). Брандмауэры компании могут блокировать соответствующие порты.

Что касается «ftp с использованием ssl / tls» псевдонима «ftps»: ваш ответ здесь . Не тратьте время на ftp_ssl_connect() 🙂

(Да, он плохо документирован на сайте php, если не сказать больше)

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

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

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

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

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

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

Последнее решение, которое я обычно использую, состоит в том, чтобы запустить curl-бинарный файл из инструкции exec, для более позднего случая с использованием переключателя «-k».

  1. Многие дешевые webhoster не дают вам ssh (отсюда нет ftp через ssh aka sftp), но только ssl-secure ftp aka ftps ( см. Здесь ). У вас может быть эта проблема. Как и другие, используйте filezilla или другой ftp-клиент для предварительного тестирования ваших кредитов и выбранного метода защиты.

  2. ftp_ssl_connect () по крайней мере под окнами будет длинным путешествием, так как вы должны скомпилировать свои собственные php-файлы, см. здесь .

  3. Как справедливо отмечает этот php contributor , безопасное соединение не защищено, если вы не знаете, кто вы тоже говорите, например, «сертификация сверстников» через действительные сертификаты.

  4. phpseclib , вероятно, лучший выбор . Но я не знаю, как обеспечить, он использует проверку сверстников (гадание, правда в openssl.conf …)

  5. Так что даже на момент написания статьи я удивляюсь больше, чем когда-либо, если возможна проверка достоверности ftp (ftp с аутентификацией ssl / tls) … также см. Мой вопрос здесь .

Я пробовал решение phpseclib ( http://phpseclib.sourceforge.net/sftp/intro.html ) и работает в windows / linux.

Если вы используете композитор, просто добавьте требуемый раздел:

"phpseclib / phpseclib": "0.3.*@dev"

И тогда вы можете это сделать: http://phpseclib.sourceforge.net/sftp/examples.html#put