我正在尝试使用 php 脚本上传一个 1GB 大小的文件,如果文件大小小于 20MB,它可以完美运行,但是当我增加文件大小后,按下网站上的上传按钮,它......
我正在尝试使用 php 脚本上传一个 1GB 大小的文件,如果文件大小小于 20MB,它可以完美运行,但是当我增加文件大小后,按下网站上的上传按钮,它会上传文件(我猜是因为它需要几分钟),之后,我的 Firefox 要求我下载 upload.php,而不是执行 upload.php,所以我猜,文件正在上传,但我的 php 脚本无法执行。
另外,在 Google 中搜索后,我发现了我对 php.ini 所做的以下设置,并且我的 php_info() 函数显示设置已被更改。
/*php.ini * php.ini start * /
内存限制 = 512M
post_max_size = 15000M
file_uploads = 开启
upload_max_filesize = 15000M
最大输入时间 = 20000
最大执行时间 = 20000
session.gc_maxlifetime = 20000
/*php.ini * php.ini end * /
实际上我正在创建一个可以上传文件的网站,然后用户可以与其他用户共享文件链接......
附注:如果您要上传 1GB 的文件,则应使用 Flash 上传器(Gmail/Youtube/等用于高级上传的程序),因为它可以轻松进行拖放,但最重要的是,它具有视觉吸引力的进度条。
@Kranu,你的想法非常好,它肯定会提高可用性。一旦我找到问题的解决方案,我就会这样做......
文件上传大小的限制不仅仅受到 PHP 的限制。PHP 有其限制,Apache 有其限制,许多 Web 服务都有其自身的限制,然后还有 /tmp 目录大小的限制,该限制可以通过共享主机上的用户权限来设置。更不用说硬盘空间不足了!
您的 php.ini 看起来不错,但正如已经建议的那样 - 检查 Apache 中的 LimitRequestBody 并确保您的 Web 服务允许这样做。
当您需要上传非常大的文件时,一种常见的解决方案是在客户端使用 Flash 或 Java,因为它们可以访问客户端的实际文件系统。然后,Flash/Java 可以将文件分解成小块,一次发送一个,然后在服务器端重新组装。这有多个好处。首先,您可以恢复中断的下载。其次,您不必担心任何脚本超时。第三,它可以绕过可能来自 PHP、Apache、Web 服务或其他来源的任何可能的文件系统限制。
史蒂文,现在我可以在我的网站文件夹中添加 .htaccess 文件来上传 100MB 的文件,如下所示:RewriteEngine 在 RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} myuploadfolder RewriteRule ^(.*)$ mywebsite.com/index.html [R,L]php_value 最大输入时间 0我认为您的建议可以帮助我上传大约 1GB 的文件,但是当我尝试在此 .htaccess 文件中添加 LimitRequestBody 时,出现内部服务器错误 500,所以您能告诉我应该在哪里进行更改以及如何更改 LimitRequestBody 吗?
httpd.apache.org/docs/current/mod/core.html#limitrequestbody 确保以字节为单位指定 LimitRequestBody 1073741824,并确保您的 Web 服务器允许此命令。一些 Web 服务器有外部检查,以确保不会在单个请求中发送过多数据。这可以节省带宽,最终节省资金。如果允许,您应该能够将其放在 .htaccess 文件的最后。我建议将其放在与上传脚本相同的文件夹中,以防止对您的 Web 根目录进行 DoS 攻击。
post_max_size = 15000M 应该高于 upload_max_filesize = 15000M 。可以是 post_max_size = 15001M 。我又增加到 1 了。
post_max_size = 15001M
检查您的 Web 服务器是否也允许如此大的上传。在 Apache 上,设置是 LimitRequestBody 。此限制早在 PHP 出现之前就已应用,并且无法在 PHP 内部更改/覆盖。
LimitRequestBody