这由两部分构成,一是html文件里的表单,二是php文件里的动作
一、html文件里的表单
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label> <input type="file" name="f" id="fil"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
二、php文件里的动作
mkdir("upload");
move_uploaded_file($_FILES["f"]["tmp_name"], "upload/" . $_FILES["f"]["name"]);
以上两行是核心语句,
第一行是建立一个文件夹,文件夹位置与本php文件在同一文件夹下。如果没有此文件夹,第二行是无法执行的。
第二行,现讲上传原理,当点击html文件里的提交按键时,文件会被复制为一个有临时文件名的文件。而第二行的作用其实是移动这个文件到特定的位置,原文件名不能更改。move_uploaded_file()
,里的uploaded是完成时,就说明文件已经上传完了,否则应该是upload_file()。$_FILE
是php的预定义变量,专用于文件操作。$_FILES["f"]["name"]
中的f,对应 <input type="file" name="f" id="fil">
中的f。$_FILES["f"]["name"]
中的name,对应电脑里的本地文件。
当然,在实际应用中,还应该在前面加上各种条件判断,比如如果文件已经存在,还要不要上传,否则,即使有也会直接覆盖。
三、当要上传批量文件时
html文件
<input type="file" name="f[]" id="fil">
多了中括号
php文件
move_uploaded_file($_FILES["f"]["tmp_name"][$i], "upload/" . $_FILES["f"]["name"][$i]);
没有中括号,但多了循环变量$i,当然,外面应该有循环控制语句.
rename("users/".$na."/" . $_FILES["f"]["name"][$i],"users/".$na."/" . $i.".gif");
还可以批量改名,但必须是在上传之后。
本段的核心目的就为说明f的对应关系。
整个文件上传教学,详见w3cschool、phpstudy、www.runoob.com等的php教程,均可。