2011-09-06 49 views
0

Fellas, 我在我的代碼中運行一個有趣的錯誤,我找不出原因。php drop文件大小的文件類型錯誤

我有一個3字段的表單。名稱,電子郵件,文件上傳字段。填充字段後,將其發送回相同的文件。

<form enctype="multipart/form-data" method="POST" action="index.php"> 
    <input type="text" name="name" value="<?php if(isset($_POST['name'])&&!empty($_POST['name'])){ echo $_POST['name'];}?>" maxlength="100" /> 
    <input type="text" name="email" value="<?php if(isset($_POST['email'])&&!empty($_POST['email'])){ echo $_POST['email'];}?>" maxlength="50" /> 
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" /> <input type="file" name="file_upload" size="15" value="<?php if(isset($_FILES["file_upload"]["name"])&&!empty($_FILES["file_upload"]["name"])){ echo $_FILES["file_upload"]["name"];}?>"/> 
    <input type="submit" name="submit" value="" id="image-button" /> 
</form> 

所以表單發送回index.php。現在的錯誤處理:(錯誤字段的值都在匈牙利,但我翻譯必要的字段)

$upload_errors = array(
// http://www.php.net/manual/en/features.file-upload.errors.php 
    UPLOAD_ERR_OK   => "Nincsenek hibák.", 
    UPLOAD_ERR_INI_SIZE => "Nagyobb a megengedett fileméretnél.", 
    UPLOAD_ERR_FORM_SIZE => "Nagyobb a form megengedett fileméreténél.", 
    UPLOAD_ERR_PARTIAL => "Részleges feltöltés.", 
    UPLOAD_ERR_NO_FILE => "File nem található.", 
    UPLOAD_ERR_NO_TMP_DIR => "Átmeneti könyvtár nem található.", 
    UPLOAD_ERR_CANT_WRITE => "Nem írható cél mappa.", 
    UPLOAD_ERR_EXTENSION => "Hibás kiterjesztés." 
); 



if(isset($_POST['submit'])){ 
    $errors = array(); 

    $required_fields = array('name' => 'A név megadása kötelező.', 'email' => 'E-mail cím megadása kötelező.'); 
    foreach($required_fields as $key => $value) { 
    if (!isset($_POST[$key]) || empty($_POST[$key])) { 
     $errors[] = $value; 
    } 
    } 

if(!is_valid_email($_POST['email'])){ 
    $errors[] = 'Set a correct mail address.'; 
    } 

if($_FILES["file_upload"]["size"]>2097152){ 
    $errors[] = 'Maximum 2MB file size.'; 
    } 

if(!isset($_FILES["file_upload"]["name"])||empty($_FILES["file_upload"]["name"])){ 
    $errors[] = 'You must upload a picture!'; 
    } 

if (($_FILES["file_upload"]["type"] !== "image/png")&& ($_FILES["file_upload"]["type"] !== "image/jpg") && ($_FILES["file_upload"]["type"] !== "image/jpeg") && ($_FILES["file_upload"]["type"] !== "image/pjpeg")){ 
    $errors[] = 'Only PNG or JPG/JPEG files allowed.'; 
    } 

當我嘗試上傳文件的文件大小爲2MB +錯誤再次出現:

  • 只允許使用PNG或JPG/JPEG文件。 -

此錯誤屬於文件類型!表單驗證返回一個不同的錯誤!

問:

爲什麼出現這種情況?爲什麼不觸發最大2MB文件大小。錯誤???

+0

我相信它應該是OR而不是AND。所以,如果它是這些文件類型之一,然後接受它。 – Matt

+0

這可能不會對您的具體問題有所幫助,但是...... 1)您不能依賴MIME類型來驗證文件的格式,瀏覽器可能根本不會發送它,並且您可以很容易地對其進行欺騙。但是如果你要依靠這個,你可以通過創建一個允許的MIME類型的數組(讓我們稱之爲'$ allowedTypes')來讓你的代碼更容易閱讀,並且更容易添加新的類型,然後通過檢查它調用'in_array($ _ FILES [「file_upload」] [「type」],$ allowedTypes)' – DaveRandom

+0

@Matt不正確,因爲他正在檢查它是否等於AND NOT NOT等於...所以當它等於其中一個表達式評估爲TRUE – DaveRandom

回答