PHP:上传和下载大文件的最佳方式

时间:2011-08-10 09:45:35

标签: php file-upload

我已经看到围绕这个主题的其他线索,但他们没有多少帮助。

我有一个简单的要求。 我需要创建一个简单的应用程序,允许用户从服务器上传和下载大文件(400 - 1500 MB)。 每个用户都有他的登录信息,大文件需要安全上传和下载。

使用PHP实现这一目标的最佳方法是什么? 我应该注意哪些陷阱?

谢谢, 阿米特

2 个答案:

答案 0 :(得分:2)

PHP 支持 upload file streaming

您可以使用stream_open()&等功能。 stream_write()

我还找到了{strong> PEAR 的方式on the web,但我从未尝试过这样做:

这是作者所说的:

  

PEAR中有另一种方法可以将文件传输到server1   服务器2。 PEAR有HTTP包用于上传文件。

     

HTTP_Request支持GET / POST / HEAD / TRACE / PUT / DELETE,Basic   身份验证,代理,代理身份验证,SSL,文件上传等。

<?php
  require_once "HTTP/Request.php";
  $req =& new HTTP_Request("http://domain.com/upload");
  $req->setBasicAuth("login", "pass");
  $req->setMethod(HTTP_REQUEST_METHOD_POST);

  $result = $req->addFile("data", "/home/svnlabs.mp4");
  if (PEAR::isError($result)) {
    echo "Error occurred during file upload!";
  } else {
    $response = $req->sendRequest();
    if (PEAR::isError($response)) {
      echo "Error occurred during file upload!";
    } else {
      echo "File successfully uploaded!";
    }
  }
?>

答案 1 :(得分:1)

转移是否必须通过http完成?否则,当您选择在站点上传图像并使用FTP,SFTP或类似方法处理相关文件的上载时,您可能会触发客户端应用程序。这可能是实现良好性能的最佳方式,而不是让网络服务器陷入困境。

您可以只启动允许的文件大小并让脚本运行直到完成。

ini_set('upload_max_filesize', '1024M');  
ini_set('post_max_size', '1024M');  
ini_set('max_input_time', 0);  
ini_set('max_execution_time', 0);  

但不建议您使用所讨论文件的大小。 Web服务器连接将在很长一段时间内打开,并且很难恢复中止的上传。

所以我会考虑让客户端应用程序处理实际的上传。您可以将其作为Java-applet或CLI / GUI应用程序制作,用户必须先下载才能上传文件。