Сохранение ресурса PHP для FTP-соединения между вызовами AJAX

У меня есть многопользовательское веб-приложение PHP, которое может взаимодействовать с FTP-сервером через AJAX. Приложение позволяет пользователю просматривать FTP-сайт. Javascript выполняет вызов AJAX, который взаимодействует с серверным сценарием, который возвращает список файлов и каталогов в заданном каталоге.

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

Мне нужно сохранить ресурс PHP для FTP-соединения через вызовы AJAX. Другими словами, соединение должно оставаться открытым, и я должен иметь возможность запускать ftp_nlist (), используя этот ресурс, без повторного установления соединения или повторной аутентификации с каждым новым вызовом AJAX (конечно, до истечения времени ожидания соединения). .

Кто-нибудь может придумать, как это сделать?


person Chad Johnson    schedule 17.12.2010    source источник
comment
Вы должны иметь возможность создать ftp-класс одноэлементного типа и сохранить его в каком-нибудь месте. Единственное место для хранения объекта подключения - это память Apache, и я думаю, что это будет означать настраиваемое расширение. Похоже, хороший проект, если это возможно.   -  person Clutch    schedule 18.12.2010


Ответы (4)


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

Единственный способ, который я могу придумать, - это использовать сторонний FTP-клиент, который поддерживает соединение и взаимодействует с ним через PHP. (вместо стороннего ftp-клиента вы можете просто использовать функции FTP, встроенные в ОС. Windows предоставляет их, как и Linux через программу ftp.)

person simshaun    schedule 17.12.2010
comment
Кто-нибудь знает такие сторонние библиотеки? - person Chad Johnson; 17.12.2010
comment
Ознакомьтесь с клиентами CLI, перечисленными на linuxreviews.org/software/ftp-clients - person simshaun; 17.12.2010
comment
Мое приложение должно будет управлять десятками одновременных FTP-подключений. Таким образом, несколько пользователей могут подключаться к разным серверам. Есть ли учебник / статья по использованию этих клиентов CLI в приложении PHP? - person Chad Johnson; 18.12.2010
comment
Возможно, это не учебник для этого конкретного экземпляра, но в целом для выполнения любой внешней программы с PHP вы используете функцию exec (). exec('someftpprogram -arguments -go -here') Вам просто нужно ввести команды для выполнения того, что вам нужно, как если бы вы запускали FTP-клиент через окно терминала. - person simshaun; 18.12.2010
comment
Но вот что меня интересует: если бы я использовал exec () + программу CLI, как бы я продолжал использовать соединение после его создания? - person Chad Johnson; 18.12.2010

Извините, что добавили беспорядок без четкого ответа для вас, но это может быть полезно: http://www.eecho.info/Echo/php/client-url-library-php-curl/ Похоже, вы контролируете открытие и закрытие соединений, однако с точки зрения возврата этой переменной в клиент и его повторное использование, я не уверен, что это возможно (также он может просто очистить себя из-под вашего контроля), в качестве альтернативы вы можете (в зависимости от конечной среды) рассмотреть возможность использования бэкэнда Java, вы можете закодировать простой сервер и просто добавьте код FTP поверх (ммм ... торт). Вот несколько примеров того, что вам для этого нужно сделать:

http://fragments.turtlemeat.com/javawebserver.php

http://www.javaworld.com/javaworld/jw-04-2003/jw-0404-ftp.html

Это предполагает довольно большой контроль над тем, что выполняется в серверной среде, хотя на самом деле это зависит от того, владеете ли вы сервером в основном или имеете полные привилегии делать то, что вы хотите (например, Amazon EC2, по крайней мере, от того, что они рекламируют). Возможно, вы сможете осуществить это с помощью Tomcat или какого-либо другого контейнера JSP и использовать JSP вместо написания собственного сервера, но я не знаю, что вы сможете сохранить соединение с ними, так как это вроде как PHP где сервер вообще интерпретирует файл так сказать "на лету".

person shaunhusain    schedule 17.12.2010
comment
По сути, это будет подход демона, когда демон действует от имени веб-сайта в качестве прокси и общается с серверами FTP и SFTP. Возможно, мне также понадобится какой-нибудь протокол для взаимодействия с демоном. Вы в этом направлении думаете? - person Chad Johnson; 18.12.2010
comment
Ага, поэтому вам придется установить какой-то протокол между вашим клиентом и настраиваемым сервером для запроса или публикации файлов (к счастью, вы полностью контролируете это, можете использовать xerces.jar для XML в java, это не так уж плохо), я Я предполагаю, что здесь у вас есть время, чтобы отработать этот протокол и функциональность, это самое далекое от коробочного решения, которое, я думаю, я когда-либо предлагал ... вы также можете получить от этого некоторую пользу: mina.apache.org/ftpserver звучит забавно, но также требует слишком много времени, чтобы попробовать себя прямо сейчас, удачи. - person shaunhusain; 18.12.2010

Вы не можете создать постоянное FTP-соединение с помощью обычных функций классов ftp PHP. Все ли пользователи имеют доступ к одному и тому же ftp-серверу или у вас есть веб-интерфейс ftp? Если несколько пользователей подключены к одному серверу (с одинаковыми правами), вы можете реализовать кэшированное решение.

person Oliver A.    schedule 17.12.2010
comment
Каждый пользователь сможет подключиться к произвольному FTP-серверу, передав свои учетные данные. - person Chad Johnson; 18.12.2010

В итоге я сделал эту работу, используя глобальные переменные (например, $ my_global). У меня есть одноэлементный класс ConnectionPooler, который управляет соединениями, хранящимися в хэше.

person Chad Johnson    schedule 14.04.2011