1

我有一个可以通过 AJAX 与 FTP 服务器交互的多用户 PHP Web 应用程序。该应用程序允许用户浏览 FTP 站点。Javascript 进行 AJAX 调用,该调用与返回给定目录中文件和目录列表的服务器脚本通信。

这工作正常。但是,每次请求目录列表时,服务器都必须重新建立与 FTP 服务器的连接,这需要很长时间。

我需要跨 AJAX 调用保持 FTP 连接 PHP 资源。换句话说,连接必须保持打开状态,并且我必须能够使用该资源运行 ftp_nlist(),而无需在每次新的 AJAX 调用时重新建立连接或重新验证(当然,直到连接超时) .

谁能想到一种方法来做到这一点?

4

4 回答 4

2

我认为在 PHP 中使用 FTP 库是不可能的。我看到有人甚至在 PHP 中对它提出了功能请求,但似乎没有对其采取任何行动。

我能想到的唯一方法是使用第 3 方 FTP 客户端来保持连接打开并通过 PHP 与其交互。(而不是第 3 方 ftp 客户端,您可以只使用操作系统内置的 FTP 功能。Windows 提供它们,Linux 通过“ftp”程序提供它们。)

于 2010-12-17T20:45:43.340 回答
1

很抱歉在没有明确答案的情况下添加混乱,但这可能会有所帮助: 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 相同可以说,服务器通常会“即时”解释文件。

于 2010-12-17T21:05:03.107 回答
0

您无法使用 PHP 的普通 ftp 类函数创建持久 FTP 连接。是所有用户都在访问同一个 ftp 服务器,还是您正在运行 ftp Web 界面?如果多个用户连接到同一台服务器(具有相同的权限),您可以实施缓存解决方案。

于 2010-12-17T21:18:41.187 回答
0

我最终使用全局变量(例如 $my_global)完成了这项工作。我有一个 ConnectionPooler 单例类,它管理存储在哈希中的连接。

于 2011-04-14T13:51:37.310 回答