使用php上传1GB文件

Posted

技术标签:

【中文标题】使用php上传1GB文件【英文标题】:1GB file upload using php 【发布时间】:2011-04-19 16:22:15 【问题描述】:

我正在尝试使用 php 脚本上传 1GB 大小的文件,如果文件大小小于 20MB,它可以正常工作,但是当我增加文件大小而不是在网站上按下上传按钮后,它会上传文件(我猜因为它需要几分钟),然后执行upload.php,我的firefox要求我下载upload.php,所以我猜,文件正在上传,但我的php脚本无法执行。

在谷歌搜索后,我发现我为 php.ini 设置了以下设置,我的 php_info() 函数显示设置已更改..

/*php.ini 启动*/

memory_limit = 512M

post_max_size = 15000M

file_uploads = 开启

upload_max_filesize = 15000M

max_input_time = 20000

max_execution_time = 20000

session.gc_maxlifetime = 20000

/*php.ini 结束*/

【问题讨论】:

实际上我正在制作一个可以上传文件并且用户可以与其他用户共享文件链接的网站... 附带说明:如果您要上传 1GB 文件,您应该使用 Flash Uploader(Gmail/Youtube/etc 用于高级上传),因为它允许轻松拖放,但是最重要的是,一个视觉上吸引人的进度条。 @Kranu,你的想法很不错,它肯定会增加可用性..一旦我找到我的问题的解决方案,我就会这样做...... 【参考方案1】:

检查您的网络服务器是否也允许如此大的上传。在 Apache 上,设置为 LimitRequestBody。此限制在 PHP 进入图片之前很久就已应用,并且无法在 PHP 中更改/覆盖。

【讨论】:

【参考方案2】:

文件大小上传的限制不仅仅受到 PHP 的限制。 PHP 有其限制,Apache 有其限制,许多 Web 服务有其自身的限制,然后您对 /tmp 目录大小有限制,该限制可以由共享主机上的用户权限设置。更不用说硬盘空间不够用了!

您的 php.ini 看起来不错,但正如已经建议的那样 - 检查 Apache 中的 LimitRequestBody 并确保您的 Web 服务允许这样做。

当您需要上传非常大的文件时,一种常见的解决方案是在客户端使用 Flash 或 Java,因为它们可以访问客户端的实际文件系统。然后,Flash/Java 可以将文件分成小块,一次发送一个并在服务器端重新组合。这有很多好处。首先,您可以恢复中断的下载。其次,您不必担心任何脚本超时。第三,它绕过了可能来自 PHP、Apache、Web 服务或其他来源的任何可能的文件系统限制。

【讨论】:

史蒂文,现在我可以通过在我的网站文件夹中添加 .htaccess 文件来上传 100MB 文件,如下所示: RewriteEngine On RewriteCond %SERVER_PORT 80 RewriteCond %REQUEST_URI myuploadfolder RewriteRule ^(.*)$ mywebsite.com/index.html [R,L] php_value max_input_time 0 我认为你的建议可以帮助我上传大约 1GB 的文件,但是当我尝试在这个 .htaccess 文件中添加 LimitRequestBody,我得到内部服务器错误 500,所以你能告诉我应该在哪里进行更改以及如何更改 LimitRequestBody.. httpd.apache.org/docs/current/mod/core.html#limitrequestbody 确保以字节为单位指定 LimitRequestBody 1073741824 并确保您的 Web 服务器允许此命令。一些网络服务器进行了外部检查,以确保不会在单个请求中发送太多数据。这为他们节省了带宽并最终为他们节省了金钱。如果允许,您应该可以将其放在 .htaccess 文件的最后。我建议将它与您的上传脚本放在同一个文件夹中,以防止对您的 webroot 进行 DoS 攻击。【参考方案3】:

post_max_size = 15000M 应该高于upload_max_filesize = 15000M。 它可以是post_max_size = 15001M。我已将其增加到 1 个。

【讨论】:

以上是关于使用php上传1GB文件的主要内容,如果未能解决你的问题,请参考以下文章

Firefox提供文件分享服务,匿名分享最大1GB

如何使用 GoogleDrive REST API 将大文件 (1 GB +) 上传到 Google Drive

YouTube API 截断视频 [PHP]

错误413请求实体过大

使用 javascript/jquery 验证文件上传 [重复]

Python:快速上传大文件 S3