我有下一个代码:
<?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()仍然有效:/
答案 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);