2015-02-05 171 views
0

我做了一个基于ajax的多文件上传,它工作得很好。但问题是我必须上传非常大的文件,每个文件最多可达200​​ MB,并且可能同时大小为20-25个相同大小的文件。文件正在上传,但上传需要很长时间。上传服务器上的大文件的最佳方法

我已经在PHP INI设置

post_max_size 10G 
upload_max_size 10G 
max_execution_time 3600 
memory_limit -1 

改变几件事情那么,什么是处理这种类型的文件上传,其中执行快速的最佳解决方案。

我的互联网连接速度为100 MB/S,上传速度为20 MB/S。

请给我一些很好的解决方案。

+0

或启动上传作为后台进程,所以你不会需要等待上传完成,然后做其他的事情,而上传是一个后台进程,你可以做其他的东西,而文件上传在后台。 **注意**这种方式只有在您不必马上处理上传的文件时才可行。 – 2015-02-05 12:52:49

+0

但是如果我必须加快速度会怎样。 – 2015-02-05 12:59:05

+0

嗯,如果你的上传速度已经是20MB/s,你真的无能为力了,只能购买更快的上传连接。 (如果你的上传速度明显慢于你的最高速度,我会尝试同时上传较少的文件或以某种方式更改脚本。) – 2015-02-05 13:13:38

回答

-2

最好的方法是使用旧的好FTP和一些FTP客户端,例如FileZilla

+0

但是这些文件正在被添加到站点进行下载,所以我们必须保存数据库记录的每个文件。所以我们不能使用FTP。 – 2015-02-05 12:57:42

0

从您的应用程序的角度来看,您唯一能做的就是限制同时上传文件。扩展您的ajax多文件上传脚本,一次只上传一个文件。这可能会加快一些事情。

但是,您的问题可能不是由应用程序本身引起的,而是由服务器的网络速度或其磁盘写入速度引起的。某些VPS提供程序还会限制磁盘写入操作次数/秒。因此,最好的办法可能是将您的应用程序迁移到具有更高网络速度和性能的另一台服务器上。 :)

0

根据您要上传的文件类型,您可以尝试将压缩文件发送到服务器,并在上传完成后将其解压缩。

您可以在php here中查看关于zip函数的更多信息。

要压缩一个文件: 来源:http://davidwalsh.name/create-zip-php

/* creates a compressed zip file */ 
function create_zip($files = array(),$destination = '',$overwrite = false) { 
    //if the zip file already exists and overwrite is false, return false 
    if(file_exists($destination) && !$overwrite) { return false; } 
    //vars 
    $valid_files = array(); 
    //if files were passed in... 
    if(is_array($files)) { 
     //cycle through each file 
     foreach($files as $file) { 
      //make sure the file exists 
      if(file_exists($file)) { 
       $valid_files[] = $file; 
      } 
     } 
    } 
    //if we have good files... 
    if(count($valid_files)) { 
     //create the archive 
     $zip = new ZipArchive(); 
     if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { 
      return false; 
     } 
     //add the files 
     foreach($valid_files as $file) { 
      $zip->addFile($file,$file); 
     } 
     //debug 
     //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; 

     //close the zip -- done! 
     $zip->close(); 

     //check to make sure the file exists 
     return file_exists($destination); 
    } 
    else 
    { 
     return false; 
    } 
} 

要在服务器解压缩文件:

<?php 
$zip = new ZipArchive; 
$res = $zip->open('file.zip'); 
if ($res === TRUE) { 
    $zip->extractTo('/myzips/extract_path/'); 
    $zip->close(); 
    echo 'woot!'; 
} else { 
    echo 'doh!'; 
} 
?> 
+0

声音你的脚本中有一些有趣的东西,但我的问题是如何在每个文件及其信息的数据库中添加记录。像文件类型,文件大小和文件名称一样。可能是zip格式,任何人都可以上传他们想要的任何东西。 – 2015-02-06 04:44:54

相关问题