2010-03-30 31 views
6

我有一個上傳表格和一個文件上傳。我的問題是,即使沒有文件上傳,如果(isset($ _ FILES)),或者如果還通過爲成功(空($ _ FILES)!):isset and!empty沒有通過檢查上傳的文件

$_FILES = $HTTP_POST_FILES; 
if($_POST['type'] == 'photo' && isset($_FILES)){ 
// returns true even if no file is uploaded. What am I missing! 
} 
+0

使用'$ HTTP POST_FILES'已棄用:http://php.net/manual/en/reserved.variables.files.php(除此之外,它包含與$ _FILES相同的值) – 2010-03-30 22:07:37

回答

11

作爲一個超全局,$_FILES大概是始終設置,無論上傳的文件是否存在。

檢查您期望的文件上傳並查看大小字段。 (顯然,根據手冊中的用戶提供人注意,如果形式包含上傳元素,它是可能的,即使沒有選擇的文件甚至isset($_FILES["my_file_name"])將返回true

這應該可靠地工作。

if($_POST['type'] == 'photo' && 
    ((isset($_FILES["my_file_name"]["size"]) && 
    ($_FILES["my_file_name"]["size"] > 0))){ 

(該isset()函數是爲了防止 「未定義指數」 的通知。)

你怎麼做到這一點的,順便說一句?:

$_FILES = $HTTP_POST_FILES; 
+0

我確實有過這個,但它有點久遠:$ _FILES ['image'] ['tmp_name'] ... 你知道我不知道那第二行。 $ _FILES = $ HTTP_POST_FILES; 這是其他人寫的約三部分內容之一。 – kalpaitch 2010-03-30 22:08:05

+0

@kalpaitch我認爲你可以安全地刪除那部分,這可能是PHP 4的向後兼容性。 – 2010-03-30 22:09:41

+0

@kalpaitch檢查tmp_name也很好。 – 2010-03-30 22:09:57