使用PHP上传1GB文件

6
我正在尝试使用php脚本上传1GB大小的文件,如果文件大小小于20MB,则可以完美地工作。但是,当我增加文件大小后,在网站上按下上传按钮后,它会上传文件(我猜测需要几分钟),之后,不是执行upload.php,而是我的firefox要求我下载upload.php,所以我想,文件已经被上传了,但我的php脚本无法执行。
此外,在谷歌中搜索后,我找到了以下php.ini设置,我进行了更改,并且我的php_info()函数显示已更改设置。
/*php.ini开始*/
memory_limit = 512M post_max_size = 15000M
file_uploads = On upload_max_filesize = 15000M
max_input_time = 20000
max_execution_time = 20000
session.gc_maxlifetime = 20000
/*php.ini结束*/

1
实际上,我正在制作一个网站,可以上传文件,然后用户可以与其他用户共享文件链接... - Sanniv
顺便提一下:如果你要上传 1GB 的文件,建议使用 Flash 上传器(Gmail/Youtube 等网站采用的高级上传工具),因为这样可以方便地拖放文件,并且最重要的是有一个视觉上令人愉悦的进度条。 - Kranu
@Kranu,你的想法非常好,它肯定会增加可用性。一旦我找到我的问题解决方案,我就会去做。 - Sanniv
3个回答

7
文件大小上传限制不仅仅受到PHP的限制,还有Apache、许多Web服务以及/tmp目录大小的限制,后者可能由共享主机上用户权限设置而定。更不用说硬盘空间不足的情况了!您的php.ini文件看起来不错,但正如其他人建议的那样,请检查Apache中的LimitRequestBody并确保您的Web服务允许此项功能。当您需要上传非常大的文件时,一种常见的解决方案是在客户端使用Flash或Java,因为它们可以访问客户端的实际文件系统。Flash/Java可以将文件分成小块,一次发送一个,并在服务器端重新组装。这样做有多个好处。首先,您可以恢复已中断的下载。其次,您不必担心任何脚本超时。第三,它可以绕过可能来自PHP、Apache、Web服务或其他来源的任何可能的文件系统限制。

Steven,现在我可以通过在我的网站文件夹中添加.htaccess文件来上传100MB的文件,如下所示:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} myuploadfolder RewriteRule ^(.*)$ http://www.mywebsite.com/index.html [R,L] </IfModule> <IfModule mod_php5.c> php_value max_input_time 0 </IfModule> 我认为你的建议可以帮助我上传约1GB的文件,但是当我尝试在这个.htaccess文件中添加LimitRequestBody时,我得到了内部服务器错误500,所以你能告诉我在哪里进行更改以及如何进行LimitRequestBody吗? - Sanniv
请确保以字节为单位指定 LimitRequestBody 1073741824,并确保您的 Web 服务器允许此命令。一些 Web 服务器已经设置了外部检查,以确保不会在单个请求中发送过多的数据。这可以节省带宽,最终也可以节省资金。如果允许,您应该能够将其放置在 .htaccess 文件的末尾。我建议将其放置在与上传脚本相同的文件夹中,以防止对您的 Web 根目录进行 DoS 攻击。 - stevendesu

2

post_max_size = 15000M 应该比 upload_max_filesize = 15000M 更高。 可以将其设置为 post_max_size = 15001M。 我已经将其增加了1


1

请检查您的 Web 服务器是否允许此类大型上传。在 Apache 上,设置为 LimitRequestBody。此限制将在 PHP 进入图片之前应用,并且无法从 PHP 内部更改/覆盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接