2016-11-18 1 views
0

Unsere Anwendung hat eine Anforderung, dass alle hochgeladenen Dateien unter oder 20 KB Limit sein sollten. Ich bin nicht in der Lage, die Dateigröße in PHP zu berechnen, da ich nicht weiß, wie es Dateigröße für jede 1 KB berechnet.Wie überprüft man hochgeladene Dateien kleiner als oder gleich 20 kb Limit?

Ich denke, dass 1 KB entspricht 1024 Bytes, also 20 KB ist gleich 20 * 1024 = 20480. Ist das korrekt? Mein Code akzeptiert Dateien, die größer als 20 KB sind.

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

Beiseite: Sie sollten wahrscheinlich Ihre '1' /' 0' Werte durch 'true' /' false' ersetzen. Es zeigt deine Absicht viel deutlicher. – Chris

+0

Auch ... wovon kommst du zurück? Ist dieser Codeausschnitt in einer anderen Funktion enthalten? Was ist 'do_upload'? Sollte das 'do_upload()' sein? – Chris

+0

@Chris, ich verstehe dich nicht. das ist ok, aber ich möchte wissen wie man die Dateigröße vergleicht = <20KB –

Antwort

2

Ihr Zustand 0 für die Rückgabe ist

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

Damit es wahr zu sein, beide Bedingungen müssen wahr sein. Das heißt, nur Dateien mit einer Größe größer als 20480 und mit einer Erweiterung, die nicht zulässig ist, werden dazu führen, dass die erste Verzweigung folgt.

Schalter && zu ||.

Alternativ ist es meist übersichtlicher, den "positiven" Pfad zuerst in if/else Blöcke zu setzen. Sie könnten tun

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

Ich lese das als OP wollte überprüfen, ob es eine zulässige Datei ist * und * es ist unter dem Limit, damit entfernen Sie die '!'? – LeonardChallis

+0

@LeonardChallis, wie ich zu der Frage Stellung genommen habe, ist die Absicht des OP nicht ganz klar. Ich schlug vor, Integer-Rückgabewerte durch Boolesche zu ersetzen, um damit zu helfen. Aber jetzt wurde die Frage dahingehend geändert, dass ein $ ID-Wert zurückgegeben wird, der die Semantik ändert. Dennoch denke ich, der erste Zweig in der Frage ist der "nicht erlaubt" Zweig, der ausgelöst werden sollte, wenn die Dateierweiterung nicht erlaubt ist oder die Datei zu groß ist. (Aber wenn Sie Recht haben, müsste OP den Vergleichsoperator umdrehen und "!" Entfernen). – Chris

+0

@Chris, Arbeitete wie ein Charme. Es ist ein kleines if-Bedingung Problem, also ersetze ich && mit || . Also ich denke, meine Berechnung für 20 KB ist korrekt, denn jeder 1KB php berechnet als 1 KB * 1024 Bytes = 20480 Bytes (20 KB), ist das richtig? Dank bro. –

Verwandte Themen