2016-11-18 13 views
0

私たちのアプリケーションでは、アップロードされたすべてのファイルが20KB以下のサイズである必要があります。 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

脇に: '1' /' 0'の値を 'true' /' false'に置き換えてください。それはあなたの意図をはるかにはっきりと示しています。 – Chris

+0

また、あなたは 'return'ingしていますか?このコードスニペットは別の関数の中にありますか? '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

私はそれが許可されたファイルであるかどうかをチェックしたいと思っているので、それを読んでいます*と*それは限界以下であるので、 '!'を削除しますか? – LeonardChallis

+0

@LeonardChallis、私が質問にコメントしたように、OPの意図は完全には明らかではありません。私はそれを助けるために、整数戻り値をブール値で置き換えることを提案しました。しかし今、質問は '$ id'値を返すように変更され、セマンティクスが変更されています。それでも、質問の最初のブランチは "許可され​​ていない"ブランチだと思います。ファイル拡張子が許可されていないか、ファイルが大きすぎる場合にトリガする必要があります。 (しかし、あなたが正しいとすれば、OPは比較演算子を反転させ、 '!'を取り除かなければなりません)。 – Chris

+0

@Chris、チャームのように働いた。その小さなif条件問題なので、&&を||に置き換えます。だから私は20 KBの計算が正しいと思います。1 KBのPHPは1 KB * 1024バイト= 20480バイト(20 KB)と計算されるので、そうでしょうか?ありがとう兄貴。 –

関連する問題