Я пытаюсь заставить ftp-методы php работать из виртуальной машины. Я могу подключиться с помощью ftp_connect, но потом ничего не делать.
ВЕДУЩИЙ: Ubuntu 14.10
ГОСТИ: Debian 7
Стек: Vagrant — VirtualBox — Debian — ЛАМПА
Я использую vagrant для запуска виртуальной виртуальной машины, в которой работает стек ламп. В php я запускаю некоторые вызовы методов (ftp_pasv, ftp_nlist), которые не работают.
Я обнаружил, что из-за протокола FTP, использующего случайные порты для соединений, проблема вызвана использованием сети NAT в virtualbox. У меня есть идеальная настройка vagrant-virtualbox за исключением этой проблемы. Кто-нибудь знает способ заставить ftp работать на гостевой ОС в этом сценарии. Я знаю, что мог бы попытаться использовать мостовую настройку, но это означает, что для его настройки потребуется гораздо больше работы, и машина будет доступна для публики. Поэтому я предпочел бы попытаться заставить его работать за этим NAT.
Я также попытался использовать ftp_pasv, чтобы включить пассивный режим, что решило бы проблему. Но метод возвращает false, когда я вызываю его, чтобы включить пассивный режим.
Насколько я знаю, это невозможно. Возможно, если вы захотите взломать некоторый исходный код и скомпилировать собственные решения, это сработает. Но это сложнее, чем просто использовать другую настройку. Я прибегнул к использованию curl для создания FTP-соединений. Который работает для распечатки файлов и загрузки их.
Любой, кто сталкивается с этим вопросом и действительно находит решение, пожалуйста, отправьте это здесь.
Проблема, скорее всего, связана с конфигурацией сети. Тот факт, что, например, создание каталога работает вопреки получению списка каталогов, что указывает на проблему с обратным каналом.
Потенциальной основной причиной является конфигурация сетевого маршрутизатора. Кажется, что некоторые маршрутизаторы обрабатывают пакеты по-разному, если они отправляются с разных адресов Mac (хост против гостевой системы).
У меня была эта проблема, и оказалось, что обновление Virtual Box решило проблему. Возможно, какая-то ошибка в интерфейсе NAT.