【问题标题】:How the ftp uploads works in PHP?ftp 上传如何在 PHP 中工作?
【发布时间】:2011-07-01 10:24:57
【问题描述】:

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

发生了什么:

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

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

编辑:

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

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

【问题讨论】:

  • 你的博客有成功的 POST 吗?我没有使用过那个库,但我想你会在通过 ftp 上传文件之前将文件存储在网络服务器上的临时位置;我会检查文件位置和权限,以及相关的 php.ini 指令(内存中的 max_post_size、upload_max_filesize 和 memory_limit)
  • post_max_size=200M,memory_limit=200M,upload_max_filesize=200M 我得到了正确的日志。

标签: file-upload ftp php-5.3 phpseclib


【解决方案1】:

您的表单有 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>

【讨论】:

  • 我编辑了内容。我不是在问上传有什么问题。它工作正常。我在问 ftp 上传背后的概念
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    初始客户端上传完成后,文件将存储在您的网络服务器上,现在可以在其中传输 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 解决方案的 cmets 中。以下是我发现的一些可能有帮助的资源。

    Flex FTP based client

    Flex based FTP Client question on Stack Exchange

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

    SFTP.php on Gist (for line numbers and highlighting)

    Original PHPSec SFTP.php

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

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

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

    【讨论】:

    • 再问一个问题。如果它首先使用 HTTP 方法加载到服务器,我在服务器的文件夹中获取了文件。所以 move_upload 需要几秒钟才能从 temp 移动文件。那么为什么我需要使用 ftp上传。而且我在我的应用程序前端使用 Flex。所以有可能以更快的方式实现上传
    • 你绝对可以在 Flex 中实现 FTP 协议,这有助于在这个例子中省去中间人。再次阅读您的问题,我相信如果您只想用 FTP 替换两步机制,那么就可以了。但是,如果这是我经常看到的一个示例,您需要先对文件进行编码或解析,然后再将其移入工作流程,那么这可能无济于事。您仍然需要以某种方式管理这两个步骤的过程。
    • 如果您在同一台服务器上移动文件,则不需要 FTP 上传。在 Flex 中实现 S/FTP 协议将取代本示例中使用 HTTP 上传。
    猜你喜欢
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多