File upload ftp上传在PHP中是如何工作的?

File upload ftp上传在PHP中是如何工作的?,file-upload,ftp,php-5.3,phpseclib,File Upload,Ftp,Php 5.3,Phpseclib,我正在使用库使用ftp上传文件。现在我无法理解“上传时ftp如何处理文件数据”背后的概念 结果是: 我使用submit按钮创建了文件上传表单。当我选择文件并单击submit时,加载程序启动。但文件不会进入服务器。我的期望是,当我单击submit按钮时,它会从文件中读取数据,并根据phpseclib中提到的数据包大小推送到服务器 当加载程序在浏览器中显示时,有人向我解释我误解了什么或发生了什么吗 编辑: 文件上传没有问题。唯一的问题是为什么这么晚才调用它。所以在上传时,php是否会将文件移动到服务

我正在使用库使用ftp上传文件。现在我无法理解“上传时ftp如何处理文件数据”背后的概念

结果是:

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

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

编辑:

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

我用100Mb的文件进行了测试。文件已上载。我的期望是,为什么在单击“提交”按钮后它不会立即启动?

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

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

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

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

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

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

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

    您当前的流程。

  • 用户A使用您托管的网页通过HTTP上传文件
  • 用户A在关闭浏览器前等待文件上载完成
  • 文件保存在上载脚本中指定的目录路径中
  • S/FTP脚本读取文件并启动与外部S/FTP服务器的连接,然后开始将文件传输到该服务器
  • 如果第4步是多余的,则根本不需要S/FTP脚本,除非您希望通过S/FTP从客户端传输。

    你的意图。

  • 用户A使用基于浏览器的S/FTP客户端通过S/FTP上传文件
  • 用户A等待文件上载完成
  • 文件保存在上载脚本中指定的目录路径中
  • 在您提到的可能实施Flex解决方案的评论中。以下是我发现的一些可能有用的资源。

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

    我通过Sourceforge网站将原件复制到Gist,以便您可以使用行号作为指南。SFTP库需要文件的完整路径(即/tmp/somefilehere)或有效路径。类似于fopen返回的一个
    $fp=@fopen('/tmp/somefilehere,'rb')有关示例,请参见gist上的第1132行

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


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

    您的日志中是否有成功的帖子?我还没有使用过这个库,但我想在通过ftp上传文件之前,您会将文件存储在Web服务器上的临时位置;我会检查文件位置和权限,以及相关的php.ini指令(max_post_size、upload_max_filesize和memory_limit from memory)、post_max_size=200M、memory_limit=200M、,upload_max_filesize=200M,我正确地获取了日志。我编辑了内容。我不是问上传有什么问题。它工作正常。我是在问ftp上传背后的概念。再问一个问题。如果它第一次使用HTTP方法加载到服务器,我就在服务器的文件夹中获取了文件。因此,移动_上传需要几秒钟的时间才能将文件从临时文件中移动。那么,我为什么要这样做需要使用ftp上传。而且我在我的应用程序前端使用Flex。因此,是否有可能以更快的方式实现上传您肯定可以在Flex中实现ftp协议,这将有助于减少本例中的中间人。再次阅读您的问题,我相信如果您只想用FTP取代两步机制,那么就可以了。然而,这是我经常看到的一个例子,如果在工作流中移动文件之前,您需要首先对文件进行编码或解析,那么这可能没有多大帮助。您仍然需要以某种方式管理此两步流程。如果您在同一服务器上移动文件,则不需要FTP上载。在Flex中实现S/FTP协议将取代本例中使用HTTP上传。