ftp пассивный режим и php

У меня есть веб-сервер Apache, работающий на этой машине со стабильной версией Debian. Эта программа PHP должна подключаться через FTP к удаленному онлайн-серверу, помимо прочего.

Все работало нормально, пока я не установил FTP-сервер ( vsftpd версии 3.0.3-8 + b1), но я не думаю, что это виновник.

Теперь я получаю эту ошибку

Точные ошибки:

 I won't open a connection to xxxx --->*remote server ip* (only to xxxx ---->*my public ip*) 

И не может даже ls удаленные каталоги, получая эту ошибку вместо этого:

 Unable to list directory 

Я подозреваю, что это потому, что FTP теперь работает в активном режиме «по умолчанию», но я действительно не уверен. Эти ошибки, похоже, связаны с пассивным режимом.

Как вы думаете?

  • Версия Debian: Debian GNU / Linux 9
  • Версия PHP: 7.0.30-0 + deb9u1

Подпрограммы PHP, о которых мы говорим: ftp_login() и ftp_fput()

Я думаю, что это автоматический активный режим, потому что каждый раз, когда я использую ftp_pasv(, true) он работает нормально. Не нужно было указывать раньше.

One Solution collect form web for “ftp пассивный режим и php”

Проблема под рукой

Вы сообщаете, что не можете подключиться к удаленному ftp серверу. Вы получите следующее сообщение об ошибке:

I won't open a connection to xxxx remote server ip (only to xxxx my public ip)

В зависимости от того, используете ли вы в качестве решения ftp сервера решение php ftp или vsftpd , я мог бы найти 2 возможных решения.

1. Возможное исправление конфигурации VSFTP

Потенциально вам нужно только исправить вашу конфигурацию vsftp . Я нашел это сообщение на форуме от пользователя nhtrader, который может предоставить возможное решение. Пожалуйста, прочтите его полностью, чтобы убедиться, что он относится к вам.

  • Прежде всего, это ftp сервер, расположенный удаленно или в вашем доме / локальной сети? Убедитесь, что вы можете пройти проверку подлинности или, по крайней мере, установить связь с сервером без использования службы ftp .

  • Во-вторых, убедитесь, что ваш маршрутизатор поддерживает переадресацию портов и добавьте нужные порты в список переадресации портов маршрутизатора. Если вы используете VPS для ftp сервера, обратитесь к их документации, касающейся переадресации портов и методов поддержки ftp , аутентификации, удаленного управления и т. Д.

  • GRC предоставляет достойный инструмент для проверки того, блокирует ли ваша домашняя сеть какие-либо порты или службы, которые вам потребуются. Это может быть хорошей проверкой, чтобы убедиться, что переадресация вашего порта работает и не заблокирована вашим провайдером. Вам также нужно будет создать правила брандмауэра как на хосте, так и на сервере, чтобы разрешить соединения через порты, которые вы хотите использовать.

  • В-третьих, отредактируйте файл конфигурации vsftpd расположенный в /etc/vsftpd.conf .

Добавьте следующие записи в файл, используя sudo nano /etc/vsftpd.conf :

 listen=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES idle_session_timeout=600 data_connection_timeout=120 ftpd_banner=[Whatever message of your choice] secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem 

Следующие записи могут зависеть от вас, какие порты вы хотите использовать, это только те, которые использует пользователь nhtrader .

 listen_port=26 pasv_max_port=7004 pasv_min_port=7000 

Если вы используете динамический IP-адрес и не имеете статического, используйте эту запись:

 pasv_addr_resolve=YES 

Если вы используете статический IP-адрес, используйте вместо этого:

 pasv_address=xxxx 

Сохраните и закройте файл конфигурации и перезапустите службу vsftpd .

  sudo systemctl restart vsftpd.service 

Теперь вы должны правильно подключиться к вашему FTP-серверу. Опять же, я предлагаю просмотреть весь пост на форуме, так как он охватывает много информации и возможных проблем.

2. Возможное исправление PHP

По словам пользователя Martin Prikryl в этом сообщении о переполнении стека , вы можете решить эту проблему, переместив ftp_pav после ftp_login в php module вы используете на своем сервере.

 $conn_id = ftp_connect('xxxx'); ftp_login($conn_id, 'user', 'pass'); ftp_pasv($conn_id, true); 

Он нашел этот ответ, обратившись к документации php . Пожалуйста, прочитайте все ссылки, чтобы убедиться, что это применимо для вас.

Заключение

Во-первых, проверьте правильность конфигурации вашего vsftpd или другого ftp сервера, что ваш брандмауэр разрешает ftp соединения и что вы даже можете подключиться к вашему хосту. Обратитесь к документации вашего VPS или маршрутизатора за рекомендациями в этом.

Я буду включать ссылку на справочную страницу vsftpd для справки. Он имеет ссылку на страницу, объясняющую, что делает каждая запись в файле конфигурации.

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

Удачи!

  • php 7 устанавливает броски «Не могу загрузить Zend OPcache - он уже был загружен»
  • Отправка новых журналов регистрации и выхода из системы в базу данных
  • Как настроить мой сервер, чтобы избежать утечки информации из заголовка SERVER его ответа HTTP
  • сценарий оболочки, чтобы найти комбинацию элементов массива
  • PHP phantom cron job
  • Разрешения: Каков правильный способ предоставить Apache больше прав пользователя?
  • Проблемы безопасности
  • Пакет php5-json разбивает firephp
  • Неустранимая ошибка: вызов неопределенной функции gzopen () в /etc/apache2/htdocs/sites/all/modules/smart_ip/includes/smart_ip.utility.inc в строке 454
  • Как удовлетворить требуемые зависимости, чтобы установить ожидаемое расширение pecl на Mac OS X?
  • phpmyadmin не работает после установки php5-mysqlnd
  • Interesting Posts

    Как установить kvm в Debian (Lenny) поверх powerpc

    Может ли один компьютер использоваться двумя пользователями одновременно с помощью двух мониторов?

    Как пакетные файлы mv для папок, созданные и названные по дате изменения?

    Преобразовать открытый ключ PEM в DER

    Требуется, чтобы grep значение BINARY.ear md5sum в файле md5sum.txt

    Имена файлов с пробелами в подстановке

    Как предотвратить cp от слияния двух одинаково названных каталогов?

    Команда resize2fs не найдена

    Есть ли способ сгладить .pdf-изображение из командной строки?

    Как приложение выбирается над другими, чтобы открыть определенный тип файла в Linux

    Разрешения папки передачи.service меняли каждый запуск

    Движение мыши перемещается, когда средняя кнопка удерживается

    Как удалить учетную запись пользователя с помощью терминала

    Проблема при получении ответов от DNS-сервера привязки

    Как сохранить смешанные форматы перевода строки в gawk?

    Linux и Unix - лучшая ОС в мире.