PHP:上传多个大文件的好方法是什么? 用PHP上传多个大文件的好方法是什么?

PHP:上传多个大文件的好方法是什么? 用PHP上传多个大文件的好方法是什么?,php,forms,file,upload,Php,Forms,File,Upload,注意:在我的情况下,我并不需要非常大的文件,我需要40-50或100 MB的上传。我的目的和目标主要是在网站上传文档,这些文档(pdf、doc等)有时可能是20-30MB,很少是100+MB,通常php最大上传文件大小是10-20MB。我认为拥有一个大的MAX_UPLOAD_文件大小是非常糟糕的,无论如何,允许在PHP中上传大文件(比如1GB+)是一个非常糟糕的主意 我一直在阅读,甚至在这里,不同的解决方案,如 LopPoad 和其他一些(HTTP上传,BigPoad等),我不确定哪种方式更好考

注意:在我的情况下,我并不需要非常大的文件,我需要40-50或100 MB的上传。我的目的和目标主要是在网站上传文档,这些文档(pdf、doc等)有时可能是20-30MB,很少是100+MB,通常php最大上传文件大小是10-20MB。我认为拥有一个大的MAX_UPLOAD_文件大小是非常糟糕的,无论如何,允许在PHP中上传大文件(比如1GB+)是一个非常糟糕的主意

我一直在阅读,甚至在这里,不同的解决方案,如<强> LopPoad 和其他一些(HTTP上传,BigPoad等),我不确定哪种方式更好考虑。

作为一个原则,我想找到一些有编码的东西(不是一个废弃的库),并且可能遵循编码标准(PSR)

我认为从头开始写作将是一项巨大的工作,但也许我错了,如果有人这样做了,我想听听你的经验。当然,如果我找不到满足我需要的东西,我将不得不编辑现有的库或自己编写一个库

我会尝试一下plupload,但我最担心的是它可能没有得到很好的保护。有一个v3版本,但稳定的版本仍然是v2。如果我理解正确的话,GitHub上这个库的最后一次更新是在2017年进行的,这并不能真正让我放心。但是一般来说,一切变化都非常快

问题1:服务器仅在上载完成时才知道文件的大小 我认为这是第一个问题。在上传完成之前,我无法确定文件大小。如果因为文件太大而不得不在PHP中给出一个错误,我需要先上传文件。我可以猜测javascript的大小,但我认为这太容易破解了。HTML5也是如此。所有客户端检查都可能被“黑客”或操纵,即使它需要工作,它仍然是可行的

问题2:文件分块,这是最好的解决方案吗? 我读过关于文件分块的书,这很有趣,但那只是客户端的,对吗?因为要在服务器端对文件进行分块,您需要回到问题1,您需要在分块之前上载整个文件。客户端分块安全吗?是否存在已知的漏洞?(例如,我可以在上传文件时利用某些漏洞吗?)。稍后我将阅读更多关于这方面的内容

上传所需的时间呢?假设您使用4G手机在表单上上传两个PDF或JPG,您必须在那一刻上传20-30 MB的坏信号,假设您需要30秒或1分钟上传它们。服务器会在一段时间后停止侦听吗

在任何情况下,对于文件分块,我是否需要有一个大的MAX\u FILESIZE\u上传?请求通常与整个文件一起发送(作为POST),因为大小超过了PHP限制,可能会返回错误?我想保持一个正常的PHP文件大小限制

问题3:停止文件上载并删除中断的上载 如果我停止或我想停止上传会发生什么?我猜服务器会发现自己有一个临时文件,只是部分上传

那么,一般来说,让cron检查/tmp(或其他)文件夹并删除未完成文件的最佳方法是什么

问题4:覆盖中断的上载 如果用户上载的新文件应该覆盖旧文件,但旧文件未完成,该怎么办?比如说,用户上传了一个10MB的文档,但意识到它是错误的。他可能会重新加载页面,或者再次单击“浏览”并上传新页面。因此,所有临时文件都应该有一个唯一的名称。如果我没记错的话,PHP已经在/tmp/中给了它们一个随机名称。这够了吗?手动给他们一个随机的名字会更好吗,也许是基于时间戳

在代码中,类似于:

$fileName=time()。uniqid()。tmp′

问题5:多个文件上传怎么样? 假设用户上载了3个文档,每个文档10 MB。服务器应该同时接收还是逐个接收?或者可能是一样的?乍一看,我可能认为同时进行多次上载可能会导致服务器负载出现更多问题。也许这并不重要

问题6:无障碍 所有这些都容易获得吗?您认为使用屏幕阅读器的用户能够毫无问题地上传多个(可能是大的)文件吗

结论
最后,我将看看现有的库,并测试一下是否能找到一个满足我需求的好解决方案。总的来说,我希望阅读一些评论或经验,帮助我理解可能遇到的困难和问题。

我将尽力帮助您回答您的问题:

问题1:服务器仅在上载完成时才知道文件的大小

您需要配置
upload_max_filesize
post_max_size
以允许最大上传文件,您希望能够在单个请求中接收该文件

是的,一旦上传文件,您就会知道大小,因为一旦文件完全上传,您的脚本就会执行

您可以在javascript中进行某种检查,以改进您对客户的UI

此外,如果文件超过最大大小,则该文件在服务器脚本中将不可用

问题2:文件分块,这是最佳解决方案吗?

我不认为这会比上传整个文件更好

速度不会增加,因此尽管您可以并行上传,但上传速度将由客户端速度决定,您最终将以10Mb/s的速度上传1个文件或以1Mb/s的速度上传10个文件,最终结果将是相同的

你也将有一个非常好的com