$ _FILES为空,但move_uploaded_file()有效

时间:2014-11-05 19:41:52

标签: php file-upload

我有下一个代码:

<?php
if(empty($_FILES)) 
    echo 'vacia'; 
else 
    echo 'con algo';
var_dump($_FILES);

$tempFile = $_FILES['Filedata']['tmp_name'];
$fileName = $_FILES['Filedata']['name'];

move_uploaded_file($tempFile, "./" . $fileName);
?>

现在,空($ _ FILES)为真,因为显示字符串'vacia'。同时在var_dump()中显示'array(0){}'。

但是move_uploaded_file()仍然可以完美运行。有人可以解释一下吗?

error_reporting(E_ALL)在我使用它的每一行中说'未定义的索引Filedata',但我可以理解为什么move_uploaded_file()仍然有效:/

2 个答案:

答案 0 :(得分:2)

您应该检查move_uploaded_files()的回复:

$result = move_uploaded_files($tempFile, "./", $fileName);

成功时会true或错误会false。在您的情况下,它应该是false。由于数组索引不存在,PHP将抛出E_NOTICE级别错误并使用空字符串,因此您实际上是这样做的:

move_uploaded_file('', "./", '');

但如果未启用E_NOTICE,则不会显示任何可见的错误消息。 (见http://php.net/manual/en/function.error-reporting.php

答案 1 :(得分:0)

您可能需要检查文件是否存在。仅因为名称存在并不意味着该文件存在。

if(is_file($_FILES['Filedata']['tmp_name'])){
    echo 'vacia'; 
}else{
    echo 'con algo';
    exit("File doesn't exist, I can't move it so I'm out!");
}
var_dump($_FILES);

$tempFile = $_FILES['Filedata']['tmp_name'];
$fileName = $_FILES['Filedata']['name'];

move_uploaded_file($tempFile, "./" . $fileName);