PHP memory_limit和$ _FILES大小

时间:2016-07-31 02:01:24

标签: php .htaccess config memory-limit

当我尝试上传文件时,我检查文件大小如下:

var date = DateTime.ParseExact("20120214", 
                              "yyyyMMdd", 
                               CultureInfo.InvariantCulture);    

var result = dbContext.orders
        .Where(q => dbContext.orders
                     .Where(s => s.purch_amt < q.purch_amt)
                     .Where(s => s.ord_date == date).Count() > 0)
        .ToList()

在我的htaccess文件中,我有:

if($_FILES['attachment_file']['size'] > (1024 * 1024 * 20)) // 20 MB
{
echo 'The file is too big !'; exit();
}

所以,如果文件超过20 MB,我检查使用php,然后停止脚本。但错误&#34;文件太大了!&#34;没有显示...

在php错误日志中,我收到错误&#34;允许的内存大小为22020096字节耗尽&#34;。

如果我将php_value memory_limit 21M php_value max_execution_time 300 php_value upload_max_filesize 21M php_value post_max_size 21M 更改为(1024 * 1024 * 20),它就会按预期工作。 php捕获错误并向我显示消息:&#34;文件太大了!&#34;。

问题出在哪里?为什么不使用20 MB?

PS:我检查了phpinfo,看看来自htaccess的配置是否正常,而且没问题。

3 个答案:

答案 0 :(得分:1)

如果您使用的是imagecreatefromjpeg(),我怀疑它需要分配足够的内存来存储源图像中的原始像素数据。也就是说,加载10x10图像将需要10 * 10 * 3 = 300字节的存储或更多仅用于像素数据。鉴于JPEG大小,我怀疑你有一个非常大的图像。该像素数据的大小加上任何PHP开销都可能超出您的内存限制,特别是如果您正在进行除读取和保存之外的任何操作。

答案 1 :(得分:0)

尝试在.htaccess中增加21MB以上的内存限制以允许应用程序运行时内存,或者在PHP中使用它:

ini_set('memory_limit', '128M');

答案 2 :(得分:0)

您需要确保正确设置以下所有变量:

upload_max_filesize - max size of any individual file in an upload
max_file_uploads - total number of files allowed to be uploaded
post_max_size - sum total of all data being POSTed (form data + files)
memory_limit - must be > post_max_size, to allow space for PHP + script overhead

@ref:Upload doesn't work right when the file is too big

并摆脱这种情况

if($_FILES['attachment_file']['size'] > (1024 * 1024 * 20)) // 20 MB
{
echo 'The file is too big !'; exit();
}