如何防止大型Apache / PHP文件上传失败?

时间:2012-07-06 11:15:23

标签: php apache memory-management file-upload large-files

我最近在我们的一台服务器上安装了PHP下载门户。一切正常,但用户无法上传大文件(约20 MB)。

我将以下设置设置为极大值或无限制:

memory_limit
upload_max_filesize
post_max_size
memory_limit

完整php.ini此处:http://pastebin.com/NrqJvMVM

但重启服务器后仍然失败。

我错过了一个设置吗?我是否必须更新Apache配置中的任何值?公司防火墙可能会以某种方式干扰它吗?

编辑:我检查了phpinfo(),主配置仍显示旧值。但是,配置文件C:\ Windows \ php.ini具有新值。我使用了错误的配置文件。

8 个答案:

答案 0 :(得分:14)

您也可以在脚本中测试参数。也许这会有所帮助:

  1. max_execution_time = ini_set(“max_execution_time”,“ - 1”);
  2. post_max_size = ini_set(“post_max_size”,“200M”);
  3. memory_limit = ini_set(“memory_limit”,“200M”);
  4. upload_max_filesize = ini_set(“upload_max_filesize”,“200M”);
  5. 在.htaccess中:

    php_value upload_max_filesize 200M

    php_value memory_limit 256M

    php_value max_execution_time 18000

    以下是关于此主题的精彩文章:http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

    您的服务器上是安装了Suhosin还是使用了fcgi; - )?

答案 1 :(得分:6)

安装的所有配置设置都包含在 php.ini文件中。有时,这些设置可能会被apache .htaccess文件中的指令覆盖,甚至可能会被脚本本身覆盖。

我们需要修改以下设置 -

  • file_uploads
  • 的upload_max_filesize
  • max_input_time设置
  • memory_limit的
  • 的max_execution_time
  • 的post_max_size

下面详细介绍配置设置。

  • upload_max_filesize和post_max_size

    文件通常以称为“multipart / form-data”的格式发布到网络服务器。 post_max_size设置脚本以这种方式可以接受的数据量的上限。理想情况下,此值应大于您为upload_max_filesize设置的值。

    重要的是要认识到upload_max_filesize是您要上传的所有文件的大小的总和。 post_max_size是upload_max_filesize加上表单中所有其他字段的长度加上编码器可能包含的任何mime标头的总和。由于这些字段通常较小,因此您通常可以将上传最大尺寸近似为后最大尺寸。

    根据PHP文档,您可以在HTML表单中设置MAX_UPLOAD_LIMIT,以建议对浏览器的限制。

  • memory_limit的

    当PHP引擎处理传入的POST时,它需要将一些传入的数据保留在内存中。只有在配置时使用了--enable-memory-limit选项,该指令才有效。设置太高的值可能非常危险,因为如果同时处理多个上传,则所有可用内存都将用完,而消耗大量内存的其他不相关脚本也可能影响整个服务器。

  • max_execution_time和max_input_time

    这些设置定义脚本的最长生命周期以及脚本在接受输入时应花费的时间。如果传输几个兆字节的数据,则max_input_time应该相当高。您可以通过调用脚本中的set_time_limit()函数来覆盖ini文件中max_input_time的设置。

添加个人评论

  • Apache设置

    apache webserver有一个LimitRequestBody配置指令,它限制所有POST数据的大小,而不管使用的是哪种Web脚本语言。某些RPM安装将请求主体限制为512Kb。您需要将其更改为更大的值或完全删除条目。

  • 其他选项

    如果您希望在您的网站上处理大量并发文件传输,请考虑使用perl或java服务器端组件。 PHP恰好是我们最喜欢的Web编程语言,但perl和Java在文件上传方面略微领先。

另见:

  1. Upload large File upto 100MB using php
  2. upload large files using php, apache
  3. PHP: Uploading large files fail

答案 2 :(得分:3)

也许,this文章可以帮到你。您可以将参数添加到.htaccess

答案 3 :(得分:2)

你已经写了两次post_max_size变量,如果0和第二个值是9999M,则从第一个值开始,删除第一个并尝试它。

答案 4 :(得分:2)

  

我使用了错误的配置文件。

好吧,phpinfo()告诉你你正在使用哪一个。查看输出顶部附近的Configuration File (php.ini) PathLoaded Configuration File

答案 5 :(得分:1)

可能没有正确设置MAX_FILE_SIZE ...

<form enctype="multipart/form-data" action="index.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
<input name="filedata" type="file" />
<input type="submit" value="Send file" />
</form>

答案 6 :(得分:1)

你应该找到正确的php.ini文件=)

答案 7 :(得分:1)

我过去一直处于你的境地,我找到的最佳解决方案是使用第三方库将文件分割成客户端的块并将它们全部重新组合在服务器上。 我发现了这个:http://www.plupload.com/

非常方便有效。它适用于各种不同的技术,因此可以在大多数客户机器上运行。 (flash,silverlight,html5文件api aso ...) 干杯!