文件上传
首先我们建立一个html文件,并将其命名为form.html。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上传">
</form>
</body>
</html>
然后我们在建立一个php文件,将其命名为upload_file.php,与form.html中的form action="upload_file.php"对应。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>upload_file</title>
</head>
<body>
<?php
if($_FILES["file"]["error"]>0)
{
echo "错误:".$_FILES["file"]["error"]."<br>";
}
else
{
echo "上传文件名:".$_FILES["file"]["name"]."<br>";
echo "文件类型:".$_FILES["file"]["type"]."<br>";
echo "文件大小:".($_FILES["file"]["size"]/1024)."kb"."<br>";
echo "文件临时存储的位置:".$_FILES["file"]["tmp_name"];
}
?>
</body>
</html>
输出显示如下:
在输出时出现了一些问题,比如我们在调试的时候,应当调试的文件是html文件,而不是php文件,如果我们调试php文件,即upload_file.php文件,就会出现以下内容:
接下来我们要对上传的文件进行限制,用户只能上传gif,jpeg,png,jpg文件,且文件的大小必须小于200kb。
我们将这个文件命名为form_v2.html,是form.html的升级版本。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传v2</title>
</head>
<body>
<form action="upload_file_v2.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上传">
</form>
</body>
</html>
我们再创建一个名为upload_file_v2的php文件,这个文件是upload_file.php的升级版,升级了对上传文件的限制。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>upload_file_v2</title>
</head>
<body>
<?php
//允许上传的图片扩展名
$allowedExts=array("gif","jepg","jpg","png");
$temp=explode(".",$_FILES["file"]["name"]);
$extension=end($temp);
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jepg")
||($_FILES["file"]["type"]=="image/jpg")
||($_FILES["file"]["type"]=="image/pjpeg")
||($_FILES["file"]["type"]=="image/x-png")
||($_FILES["file"]["type"]=="image/png"))
&& ($_FILES["file"]["size"]<204800)//小于200kb
&& in_array($extension,$allowedExts))
{
if($_FILES["file"]["error"]>0)
{
echo "错误::".$_FILES["file"]["error"]."<br>";
}
else
{
echo "上传文件名:".$_FILES["file"]["name"]."<br>";
echo "文件类型:".$_FILES["file"]["type"]."<br>";
echo "文件大小:".($_FILES["file"]["size"]/1024)."kb<br>";
echo "文件临时存储的位置:".$_FILES["file"]["tmp_name"]."<br>";
//判断当期目录下的upload目录不存在该文件,则将文件上传到upload目录下
//如果没有upload目录,则需要创建,upload目录权限为777
if(file_exists("upload/".$_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"]."文件已经存在。";
}
else
{
//如果upload目录不存在该文件,则将文件上传到upload目录下
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "文件存储在:"."upload/".$_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式!";
}
?>
</body>
</html>
输出结果如下:
在书写这段代码的时候也出现了一些问题,比如我最开始写的文件名为upload_php_v2.php,但是在html中写的却是,form action=“upload_file_v2.php”,文件名对不上,所以出现了问题。
因此我们在书写文件名的时候,一定要注意文件名要写的简洁,需要让人明白这个文件所实现的基本功能是什么,否则就会出现我所出现的问题。
除此以外,我们在调试这段代码时还出现了一些问题,比如,我们在上面的代码里面写了这样的一段:
//判断当期目录下的upload目录不存在该文件,则将文件上传到upload目录下
//如果没有upload目录,则需要创建,upload目录权限为777
if(file_exists("upload/".$_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"]."文件已经存在。";
}
else
{
//如果upload目录不存在该文件,则将文件上传到upload目录下
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "文件存储在:"."upload/".$_FILES["file"]["name"];
}
这段代码实现的功能就是,在htdocs文件夹里的upload文件夹里上传文件。
但是如果我们没有在htdocs中创建upload文件夹,文件就会报错:
为了解决这个问题,我们只需要在htdocs中创建一个upload文件夹即可。
总结:没什么好说的,继续努力吧!