用php实现文件的上传
1、准备工作:开始前要注意,由于上传文件用不到数据库,所以我就不创建数据库了。(其实也会用到数据库,就是要取某个人的头像时候,是需要把这个图片的路径存到数据库中然后取出来显示的。)
然后第一步,你需要先按我的路径进行创建项目路径:在wamp中的www文件夹里面按下面的路径进行创建: tests/up/创建uploads文件夹(用于存放上传后的文件的文件夹),创建index.php(用于点击选择文件后提交的页面),doupload.php(实现文件上传的代码存放)
可以看图片进行创建

2、第一步:以上的准备工作都做好之后,在index.php里面进行编码。
代码如下:
<!-- 文件上传得form表单 -->
<!-- enctype="multipart/form-data"文件上传必加的文件头!! action是提交到的文件路径 ,method是提交的方式-->
<form action="doupload.php" method="post" enctype="multipart/form-data">
<!-- 注意下面这个就是实现点击后上传文件的input标签 doupload.php是根据这里设置的name进行获取文件信息的-->
上传图片:<input type="file" name="pic">
<!-- 注意下面这个就是实现点击后提交按钮 -->
<input type="submit" value="上传">
</form>
注意:运行index.php文件必须是开启wamp后在浏览器中输入:localhost/tests/up/index.php才可以运行!!后面操作也是这样。


3、第二步:在doupload.php文件里面进行如下的编码,这里我将会分布给大家解析。
代码编写步骤:首先获取文件信息,然后定义上传的文件类型,上传后文件存放路径
代码:
//1.获取上传文件信息
$upfile=$_FILES["pic"]; //pic是前面index.php上传文件时的name值!
//定义允许的类型 ,如果需要上传其他文件你只要对应的改文件属性就可以了,注意按格式。我这里主要是设置了只能上传图片,当然你也可以不要这个定义就可以什么都上传了。
$typelist=array("image/jpeg","image/jpg","image/png","image/gif");
//上传后存放的路径
$path="./uploads/";//定义一个上传后的目录

4、第三步:对上传的文件进行错误的定义编写,这样就知道当文件上传的过程中哪里出现问题了,就弹出对应的错误提示。
代码:
//2.过滤上传文件的错误号
if($upfile["error"]>0){ //$upfile["error"]是文件错误机制,可以针对对应提示的错误编码来对应的显示错误信息。
//获取错误信息
switch($upfile['error']){
case 1:
$info="上传得文件超过了 php.ini中upload_max_filesize 选项中的最大值.";
break;
case 2:
$info="上传文件大小超过了html中MAX_FILE_SIZE 选项中的最大值.";
break;
case 3:
$info="文件只有部分被上传";
break;
case 4:
$info="没有文件被上传.";
break;
case 6:
$info="找不到临时文件夹.";
break;
case 7:
$info="文件写入失败!";
break;
}
die("上传文件错误,原因:".$info); //die是直接把错误输出并且停止继续执行下去
}
注意:以上这里注意看对应的数字就是对应的错误原因。

5、第四步:这次的编码主要限制文件的大小,文件类型的过滤,还有设置文件名称
代码:
//3.本次上传文件大小的过滤(自己选择)删除后就可以不限制文件大小
if($upfile['size']>100000){
die("上传文件大小超出限制");
}
//4.类型过滤
if(!in_array($upfile["type"],$typelist)){
die("上传文件类型非法!".$upfile["type"]);
}
//5.上传后的文件名定义(随机获取一个文件名)
$fileinfo=pathinfo($upfile["name"]);//解析上传文件名字
do{ //为的是判断是否已经存在文件名称和路径
$newfile=date("YmdHis").rand(1000,9999).".".$fileinfo["extension"];
//这里给文件的名字设置为当前时间年月日时分秒+随机设置数字,这一就可以防止名字冲突而覆盖了。
}while(file_exists($path.$newfile));

6、第五步:执行文件上传。这步主要是移动文件到设置好的路径并且重新给文件取名。
代码:
//6.执行文件上传
//判断是否是一个上传的文件
if(is_uploaded_file($upfile["tmp_name"])){
//执行文件上传(移动上传文件) -->需要移动文件到当前的路径
if(move_uploaded_file($upfile["tmp_name"],$path.$newfile)){
echo "文件上传成功!";//如果上传成功就提示成功
//注意:如果你是想把文件名存到数据库你需要在这里直接用sql语句执行添加东西到数据库就可以了,并且文件的路径+名字是:$path.$newfile.
}else{
die("上传文件失败!"); //如果上传失败就提示失败
}
}else{
die("不是一个上传文件!"); //如果不是文件就提示这个
}

7、然后保存好后就可以开始测试这个文件上传了。我就在这里进行演示,并且在下个步骤进行贴出全部的代码。



8、最后附上全部的代码,首先是index.php
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>图片上传和下载示例</title>
</head>
<body>
<center>
<h2>文件上传教程</h2>
<!-- 文件上传得form表单 -->
<form action="doupload.php" method="post" enctype="multipart/form-data">
上传图片:<input type="file" name="pic"><input type="submit" value="上传">
</form>
</center>
</body>
</html>

9、其次是doupload.php,执行上传文件的代码
代码:
<meta charset="utf-8">
<?php
//1.获取上传文件信息
$upfile=$_FILES["pic"];
//定义允许的类型
$typelist=array("image/jpeg","image/jpg","image/png","image/gif");
$path="./uploads/";//定义一个上传后的目录
//2.过滤上传文件的错误号
if($upfile["error"]>0){
switch($upfile['error']){//获取错误信息
case 1:
$info="上传得文件超过了 php.ini中upload_max_filesize 选项中的最大值.";
break;
case 2:
$info="上传文件大小超过了html中MAX_FILE_SIZE 选项中的最大值.";
break;
case 3:
$info="文件只有部分被上传";
break;
case 4:
$info="没有文件被上传.";
break;
case 6:
$info="找不到临时文件夹.";
break;
case 7:
$info="文件写入失败!";break;
} die("上传文件错误,原因:".$info);
}
//3.本次上传文件大小的过滤(自己选择)
if($upfile['size']>100000){
die("上传文件大小超出限制");
}
//4.类型过滤
if(!in_array($upfile["type"],$typelist)){
die("上传文件类型非法!".$upfile["type"]);
}
//5.上传后的文件名定义(随机获取一个文件名)
$fileinfo=pathinfo($upfile["name"]);//解析上传文件名字
do{
$newfile=date("YmdHis").rand(1000,9999).".".$fileinfo["extension"];
}while(file_exists($path.$newfile));
//6.执行文件上传
//判断是否是一个上传的文件
if(is_uploaded_file($upfile["tmp_name"])){
//执行文件上传(移动上传文件)
if(move_uploaded_file($upfile["tmp_name"],$path.$newfile)){
echo "文件上传成功!";
//echo $newfile;//取这个文件名
// echo "<h3><a href='index.php'>浏览</a></h3>";
}else{
die("上传文件失败!");
}
}else{
die("不是一个上传文件!");
}

