2012-03-09 162 views
2

所有, 我用下面的代碼來一些圖片上傳到我的WordPress的博客中添加某些文件類型:只允許上傳

$fieldname = 'logo'; 
include_once(ABSPATH . 'wp-admin/includes/media.php'); 
include_once(ABSPATH . 'wp-admin/includes/file.php'); 

if ($_FILES[$fieldname]) { 
    $overrides = array('test_form' => false); 
    $file = wp_handle_upload($_FILES[$fieldname], $overrides); 
    echo $file[error]; 
} 

這工作得很好,不過,我可以上傳任何類型的文件,因爲你知道這可能是潛在的危險。有沒有辦法確保該文件只是一個.jpg,.jpeg,.gif或覆蓋或類似的東西?任何幫助將不勝感激!

謝謝!

回答

8

在允許的MIME類型的覆蓋中設置一個數組。這裏是一個gif/jpg的例子

$fieldname = 'logo'; 
include_once(ABSPATH . 'wp-admin/includes/media.php'); 
include_once(ABSPATH . 'wp-admin/includes/file.php'); 


if ($_FILES[$fieldname]) { 
    $allowed_file_types = array('jpg' =>'image/jpg','jpeg' =>'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png'); 
    $overrides = array('test_form' => false, 'mimes' => $allowed_file_types); 

    $file = wp_handle_upload($_FILES[$fieldname], $overrides); 
    echo $file[error]; 
} 
+0

謝謝,這就是我一直在尋找的。它雖然給我一個錯誤,當我嘗試上傳一個圖像,說它不被允許。關於如何看到它所檢查的價值的任何想法? – user1048676 2012-03-09 19:36:59

+0

編輯:$ allowed_file_types數組已更改FYI。 – 2012-03-09 20:07:17

0

你可以檢查文件的擴展名是這樣的:

// check for extension ! 
    $name = $_FILES['foto']['name']; 
    $ext = explode(".",$name); 
    $ext = array_reverse($ext); 
    $ext = strtolower($ext[0]); 
    $valid = 0; 
    $error = false; 

    if (!empty($_GET['exts'])) { 
     if ($_GET['exts'] == 'all') { 
      $valid=1; 
     } else { 
      if (strpos($_GET['exts'],$ext) !== false) $valid=1; 
      else $valid=0; 
     } 
    } else { 
     if (strpos($defexts,$ext) !== false) $valid=1; 
     else $valid=0; 
    } 

您還可以檢查MIME類型的文件,這是值「類型」,而不是「名稱」。 請參閱http://www.php.net/manual/en/reserved.variables.files.php