2010-03-30 35 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