2013-06-11 29 views
0

我试图弄清楚如何检测文件是否大于php.ini中允许的最大值。当我发布大于最大大小的文件时,该帖子是空的。我尝试过设置帖子最大大小和上传最大大小,但无济于事。我在Zend框架中工作,但没有在application.ini文件中看到限制文件上传大小的任何内容。如何检测文件上传是否大于允许的最大值

如果我做的:

if ($this->getRequest()->getPost()) { 
    print_r($_FILES); die(); 
} 

,大小比为php.ini限值时,脚本死亡。如果文件很大,则帖子为空,并且die()未被命中。那么有什么我失踪?如果该帖子为空,如何检测文件是否大于限制?

解决:

if (array_key_exists('CONTENT_LENGTH', $_SERVER) && !$_FILES && !$_POST) { 
    die(); 
} 

回答

2

使用ini_set('post_max_size', '8M');到最大,后大小设置为8兆字节。

使用ini_set('upload_max_filesize', '8M');可以将文件的个别大小设置为8 MB - 如果您上载多个文件(可能需要),仍可以发布超过8MB的文件。

如果该文件太大,您仍然可以获得$_FILES中的发布文件,但会出现错误代码,如果您查找该文件,临时文件将不会在那里。

$_FILES["file"]["error"]可以有下列值之一:http://php.net/manual/en/features.file-upload.errors.php

通常你会写一些switch case语句来处理错误代码。

2

PHP文件上载最大大小受php.ini 3个配置值来确定,即的upload_max_filesize,upload_tmp_dirpost_max_size以及memory_limit的。你可以通过这个片段上传中允许的最大文件大小:

$max_upload = (int)(ini_get('upload_max_filesize')); 
$max_post = (int)(ini_get('post_max_size')); 
$memory_limit = (int)(ini_get('memory_limit')); 
$upload_mb = min($max_upload, $max_post, $memory_limit); 
if(($_FILES["file"]["size"] > $upload_mb)){die();}else{ echo "smaller value"} 
+2

你不需要设置'memory_limit',这根本没有意义。只有当你将文件完全读入内存时,你才可以限制'upload_max_filesize'。 – Halcyon

3
  • 如果超过upload_max_filesizeerror键包含1(UPLOAD_ERR_INI_SIZE)。

  • 如果您超过post_max_size$_POST$_FILES都为空。

除此之外,请确保您能够在开发过程中看到所有错误消息。

相关问题