Здравствуйте! Подключился к серверу ftp, получается сменить директорию, а вот список файлов в этой директории не читает. Получаемый массив пуст. В чем может быть причина ? Пробую на другом FTP - все нормально. PHP: <?php $ftp_server = ""; //Сервер FTP $ftp_user = ""; // Пользователь $ftp_pass = ""; //Пароль $ftp_dir = "/Нужная/Папка/"; //Директория на FTP $conn_id = ftp_connect($ftp_server, 21, 60) or die("Не удалось установить соединение с $ftp_server"); if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) { $mes_001 = "Произведен вход на $ftp_server под именем $ftp_user\n"; echo "Текущая дериктория: <b>".ftp_pwd($conn_id). "</b><br>"; // Текущая дериктория if (ftp_chdir($conn_id, $ftp_dir)) { echo "Новая текущая директория: <b>" . ftp_pwd($conn_id) . "</b><br>\n"; //Список файлов //получить содержимое текущей директории $contents = ftp_nlist($conn_id, ftp_pwd($conn_id)); if(is_array($contents)){ foreach($contents as $key => $value) { echo "[$key] ", $value, "<br>"; } } else { echo "Не массив!"; } } else { echo "Не удалось сменить директорию\n"; } } else { echo "Не удалось войти под именем $ftp_user\n"; } ?>
в невозможности установить соединение для передачи данных он просто вполне возможно имеет возможность установить соединение для передачи данных
Соединение установлено! Сработало бы строка 7 кода ( die("Не удалось установить соединение с $ftp_server") Так же я мог поменять директорию (перейти в нужную папку). Думаю дело в самом FTP. Странно, через браузер могу зайти на этот ftp.
Давай ты перед тем как что-то утверждать будешь хотя бы немного в этом разбираться. У тебя ФТП работает по паре 20-21 портов. Когда ты подключаешься к фтп-серверу - у тебя устанавливается Контрольное соединение по 21 порту - то, по которому пересылаются команды. Когда ты выполняешь ряд команд - получение листинга, скачивание файла и тому подобные, требующие обмена данными, выходящими за рамки аргументов команд - обмен происходит по второму соединению, инициированному по 20 порту. Вот это соединение у тебя и не установлено. Его может резать фаервол а может просто не быть обратного маршрута. Более точно сказать однозначно нельзя, потому как - ты удивишься наверное но - собственно обмен данными по фтп может происходить не только в бинарном или текстовом режиме, но и в пассивном или активном, а у этих режимов свои заморочки на установку соединения, и, следовательно, свои подводные камни и свои методы тушения пердака, когда что-то не работает. Итак: сработала бы, если б не было установлено Контрольное соединение. смог, потому что установлено Контрольное соединение. Иначе бы ты умер на строке 7. да, дело в фтп. А если быть точным - в твоём фтп-клиенте. Потому что фтп-клиент в браузере - явление более высокоуровневое. Все подводные камни разбиваются где-то в фоне, чтоб пользователю оставалось только тыкать в ссылки и грузить порнуху. Тебе нужно довести свой фтп-клиент по качеству до уровня браузерного сочетанием функций, доступных в разделе фтп языка пхп. В принципе не такая уж и сложная задача.
Разобрался! Нужно включить пассивный режим. PHP: // включение пассивного режима ftp_pasv($conn_id, true)