我有一个多用户PHP Web应用程序,可以通过AJAX与FTP服务器进行交互。该应用程序允许用户浏览FTP站点。 Javascript进行AJAX调用,该调用与服务器脚本通信,该脚本返回给定目录中的文件和目录列表。
这很好用。但是,每次请求目录列表时,服务器都必须重新建立与FTP服务器的连接,这需要花费很多时间。
我需要在AJAX调用中持久保存FTP连接PHP资源。换句话说,连接必须保持打开状态,并且我必须能够使用该资源运行ftp_nlist(),而无需重新建立连接或重新进行身份验证,每次新的AJAX调用(当然,直到连接超时)
有人可以想办法吗?
答案 0 :(得分:2)
我认为在PHP中使用FTP库是不可能的。我看到有人在PHP中有一个feature request,但它似乎没有采取任何行动。
我能想到的唯一方法是使用第三方FTP客户端,通过PHP保持连接打开并与之连接。 (而不是第三方ftp客户端,你可以使用内置于操作系统的FTP功能.Windows提供它们,Linux通过“ftp”程序提供它们。)
答案 1 :(得分:1)
很抱歉在没有明确答案的情况下添加杂乱但是这可能会有所帮助: 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类似服务器通常可以“在运行中”解释文件。
答案 2 :(得分:0)
您无法使用PHP正常的ftp类函数创建持久FTP连接。是所有用户访问同一个ftp服务器还是运行ftp Web界面?如果多个用户连接到同一服务器(具有相同权限),则可以实现缓存解决方案。
答案 3 :(得分:0)
我最终使用全局变量(例如$ my_global)来完成这项工作。我有一个ConnectionPooler单例类,它管理存储在哈希中的连接。