2

我正在使用 http://phpseclib.sourceforge.net/库使用 ftp 进行文件上传。现在我无法理解“ftp 在上传时如何处理文件数据”背后的概念。

发生的事情是:

我创建了带有提交按钮的文件上传表单。当我选择文件并单击提交时,加载程序启动。但是文件没有进入服务器。我的期望是当我单击提交按钮时,它会从文件中读取数据并推送根据 phpseclib 中提到的数据包大小进入服务器。

有人向我解释了我误解了什么或加载程序在浏览器中显示时发生了什么?

编辑:

文件上传没有问题。唯一的问题是它为什么这么晚才调用。所以在上传时php是否将文件移动到服务器到一些临时目录中。如果是这样,为什么我需要进行 ftp 上传。

我用 100Mb 的文件进行了测试。文件已上传。我的期望是为什么单击提交按钮后它没有立即启动?

4

3 回答 3

2

你有enctype="multipart/form-data"你的表格吗?

在 html 中,表单需要enctype="multipart/form-data"属性来上传文件。表格通常如下所示:

<form id="form_id" enctype="multipart/form-data" method="POST">
<input type="file" name="file" />
<input type="submit" name="submit" value="submit" />
</form>
于 2011-07-01T10:48:01.937 回答
1

我很困惑。你能发布显示的相关PHP代码吗

  1. 您对上传文件的 POST 请求的处理
  2. 如何调用 FTP 库来启动 FTP 传输

我认为正在发生的是:您的用户将文件上传到您的网络服务器,然后您从网络服务器启动 FTP 到 FTP 服务器。这里有2个上传;1 个通过 HTTP 和 1 个通过 FTP。在 HTTP 上传完成之前,您不会看到 FTP 上传开始。

于 2011-07-05T06:48:09.433 回答
1

好问题,您在这里处理 2 笔交易。第一个事务将文件放入 Web 服务器上的某个位置。这通过 POST 方法使用 HTTP 作为传输(也可能是此事务中最慢的部分)。

初始客户端上传完成后,文件将存储在您的 Web 服务器上,现在可以在其中传输 S/FTP 脚本。

阅读下面的评论,您想要的是使用 FTP 从客户端传输文件,这是一个完全可行的解决方案。但是,这是您实施的当前流程。

您当前的流程。

  1. 用户 A 使用您托管的网页通过 HTTP 上传文件。
  2. 用户 A 等到文件上传完成后才关闭他的浏览器。
  3. 文件保存在上传脚本中指定的目录路径中。
  4. S/FTP 脚本读取文件并启动与外部 S/FTP 服务器的连接并开始将文件传输到该服务器。

如果步骤 4 是多余的,则根本不需要 S/FTP 脚本,除非您想要通过 S/FTP 从客户端传输。

你的意图。

  1. 用户 A 使用基于浏览器的 S/FTP 客户端通过 S/FTP 上传文件。
  2. 用户 A 等待文件上传完成。
  3. 文件保存在上传脚本中指定的目录路径中。

在您提到的可能实施 Flex 解决方案的评论中。以下是我发现的一些可能有帮助的资源。

基于 Flex FTP 的客户端

Stack Exchange 上基于 Flex 的 FTP 客户端问题

使用 PHPSecLib在服务器端实现 S/FTP 客户端。

Gist 上的 SFTP.php(用于行号和突出显示)

原始 PHPSec SFTP.php

我通过 Sourceforge 站点将原件复制到 Gist,以便您可以使用行号作为指南。SFTP 库需要文件的完整路径(即 /tmp/somefilehere)或有效的PHP 文件资源。就像fopen $fp = @fopen('/tmp/somefilehere', 'rb');返回的一样,请参阅 gist 上的第 1132 行作为示例。

一旦通过身份验证,与初始上传相比,传输将非常快。您的服务器可能位于带宽更多的数据中心,因此文件传输速度更快。

您可能希望通过 Web 浏览器启动 S/FTP 事务。它可能只是不使用传统的脚本语言,如 PHP / Python 或 Ruby。您可以使用 Flash、Flex 或 Java 以及一些 Windows 技术从浏览器中进行 S/FTP。

于 2011-07-10T11:59:47.347 回答