У меня многопользовательское веб-приложение PHP, которое может взаимодействовать с FTP-сервером через AJAX. Приложение позволяет пользователю просматривать FTP-сайт. Javascript делает вызов AJAX, который связывается с серверным скриптом, который возвращает список файлов и каталогов в пределах данного каталога.
Это прекрасно работает. Тем не менее, каждый раз, когда запрашивается список каталогов, сервер должен восстановить соединение с FTP-сервером, что занимает много времени.
Мне нужно сохранить PHP-ресурс FTP-подключения через вызовы AJAX. Другими словами, соединение должно оставаться открытым, и я должен иметь возможность запускать ftp_nlist () с использованием этого ресурса без повторного установления соединения или повторной аутентификации с каждым новым вызовом AJAX (до тех пор, пока время соединения не закончится, конечно) ,
Может ли кто-нибудь подумать о том, как это сделать?
Я не думаю, что это возможно с использованием библиотеки FTP в PHP. Я вижу, что у кого-то даже был запрос функции для него в PHP, но, похоже, не было предпринято никаких действий.
Единственный способ, который я могу придумать, – использовать сторонний FTP-клиент, который поддерживает соединение и взаимодействует с ним через PHP. (вместо стороннего ftp-клиента вы можете просто использовать функции FTP, встроенные в ОС. Windows предоставляет их, как и Linux через программу «ftp»).
Извините за добавление беспорядка без четкого ответа на ya, но это может быть полезно: http://www.eecho.info/Echo/php/client-url-library-php-curl/ Кажется, вы контролируете открытие и закрытие соединения, однако, с точки зрения возврата этой переменной клиенту и повторного использования. Я не уверен, что это возможно (также это может просто очистить себя от вашего контроля), в качестве альтернативы вы можете (в зависимости от конечной среды) рассмотрите использование бэкэнд Java, вы можете создать простой сервер и просто добавить код FTP сверху (mmm … cake). Вот некоторые примеры того, что вам нужно сделать для этого:
http://fragments.turtlemeat.com/javawebserver.php
http://www.javaworld.com/javaworld/jw-04-2003/jw-0404-ftp.html
Это предполагает довольно большой контроль над тем, что выполняется в серверной среде, хотя это действительно зависит от того, как вы владеете сервером в принципе или имеете полные привилегии, чтобы делать то, что вы хотите (например, Amazon EC2 от того, что они рекламируют, по крайней мере). Возможно, вам удастся снять это с Tomcat или каким-либо другим контейнером JSP и использовать JSP вместо написания собственного сервера, но я не знаю, что вы сможете сохранить соединение их либо, так как это похоже на PHP где сервер обычно интерпретирует файл «на лету», так сказать.
Вы не можете создать постоянное FTP-соединение с PHP-функциями обычных функций ftp. Все ли пользователи подключены к одному FTP-серверу или вы используете веб-интерфейс ftp? Если несколько пользователей подключены к одному и тому же серверу (с теми же правами), вы можете реализовать кэшированное решение.
Я закончил эту работу с использованием глобальных переменных (например, $ my_global). У меня есть Singleton-класс ConnectionPooler, который управляет соединениями, хранящимися в хэше.