我想知道每次刷新页面时我都要以某种方式清除$ _FILES,或者为什么它回显给我变量设置而且也不是空的?当我第一次加载,或重新加载页面显然至少是使用print_r
空<html>
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</html>
<?php
if(isset($_FILES["file"]) && !empty($_FILES["file"])){
echo 'You have just uploaded '. $_FILES["file"]["name"];
}
?>
答案 0 :(得分:1)
检查表单是否已发布,否则您的代码在页面加载时
<?php
if($_POST['submit']=="submit"){
if(isset($_FILES["file"]) && !empty($_FILES["file"])){
echo 'You have just uploaded '. $_FILES["file"]["name"];
}
}
?>
答案 1 :(得分:1)
实际上,您正面临着这样的问题,因为在您通过选择文件提交后,浏览器会缓存页面响应&amp;当您按F5
或right click->reload
刷新它时,它只返回缓存的结果。您可以通过虚拟GET
请求重新加载它来尝试旧代码,它可以正常工作。例如 :
如果此页面的网址为:http://localhost/file.php
,请在地址栏中键入:http://localhost/file.php/?dummy=abc
,然后您会发现您的代码正常运行...因此,您必须验证的不只是$ _FILES而是$ _FILES [ “文件”] [“名称”]相反,会很好......
试试这个,你不会有任何麻烦......
<html>
<form action="" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</html>
<?php
if(isset($_FILES["file"]) && !empty($_FILES["file"]["name"])){
echo 'You have just uploaded '. $_FILES["file"]["name"];
}
?>
答案 2 :(得分:0)
action=""
表示您将数据发布到当前页面,但在发布数据后,当您刷新页面时,浏览器会询问您是否重新发布数据,如果您按下是,则数据将再次发布。
正确的解决方案是在发布后重定向到当前页面。
答案 3 :(得分:0)
Answer by @Karthick Kumar 是错误的,因为当有 <input type="file" name="file">
时,即使用户没有选择文件,$_FILES["file"]
也永远不会为空(使用 { {1}} 并亲眼看看)!
@Anirban's answer 是完全正确,我只是想用更令人信服的方式解释一下:
print_r()
最好的方法是:
echo( !empty($_FILES["file"]["name"]) ); //works as expected
echo( !empty($_FILES["file"]["type"]) ); //works as expected
echo( !empty($_FILES["file"]["tmp_name"]) ); //works as expected
echo( $_FILES["file"]["size"] > 0 ); //more convincing way!