2016-11-18 98 views
0

我们的应用程序要求所有上传的文件应低于或等于20 KB的限制。我无法计算PHP中的文件大小,因为我不知道它是如何计算每个1KB的文件大小的。如何检查上传的文件大小小于或等于20 kb的限制?

我在想,1 KB等于1024个字节,所以20 KB等于20 * 1024 = 20480.这是正确的吗?我的代码正在接受大于20KB的文件。

function my_method_name() { 

    if (isset($_POST['submit-button-name']) && !empty($_FILES)) { 
     if($_FILES['file_name']['size'] == 0) {        
      return 1; 
     } 
     else { 
      $path = /Path/to/dir; 
      $allowed = array('gif','GIF','png','PNG','jpg','JPG','JPEG','jpeg'); 
      $filename = $_FILES['file_name']['name']; 
      $filesize = $_FILES['file_name']['size']; 
      $ext = pathinfo($filename,PATHINFO_EXTENSION); 
      if(!in_array($ext,$allowed) && $filesize > 20480) { 
       return 0; 
      } 
      else { 
       $id = media_handle_upload('file_name', 1199); //post id of Client Files page 
       return $id; 
      } 
     } 
    } 
} 
+0

除此之外:你应该用'true' /'false'替换你的'1' /'0'值。它更清楚地表明你的意图。 – Chris

+0

另外...你从什么'返回'?这段代码片段是否在另一个函数中?什么是'do_upload'?应该是'do_upload()'? – Chris

+0

@克里斯,我不会帮你的。没关系,但我想知道如何比较文件大小= <20KB –

回答

2

你返回0条件

!in_array($ext,$allowed) && $filesize > 20480 

为了它是真实的,条件必须为真。也就是说,只有文件的大小大于20480 ,并且不允许使用扩展名将导致遵循第一个分支。

开关&&||

或者,通常先将“正”路径置于if/else块中更清楚。你可以做

if (in_array($ext, $allowed) && $filesize <= (20 * 1024)) { 
    // Logic to handle accepted download 
} else { 
    // Logic to handle rejected download 
} 
+0

我读到,因为OP想检查它是否是允许的文件*和*它在极限以下,因此删除'!'? – LeonardChallis

+0

@LeonardChallis,正如我对这个问题所评论的,OP的意图并不完全清楚。我建议用布尔值替换整型返回值来帮助解决这个问题。但是现在这个问题已经改变为返回一个'$ id'的值,它改变了语义。不过,我认为问题中的第一个分支是“不允许”分支,如果文件扩展名不允许或文件太大,应该触发该分支。 (但是,如果你是对的,OP将不得不翻转比较运算符以及去除'!')。 – Chris

+0

@克里斯,工作就像一个魅力。它是一个小的条件问题,所以我用||替换&& 。所以我想我的20 KB计算是正确的,每1KB php计算为1 KB * 1024字节= 20480字节(20 KB),对吗?多谢兄弟。 –