文件上传类
1,确定文件上传类的成员属性
首先得考虑上传文件需要哪些属性,我们可以随便写一个file文件的post方式的表单提交,然后打印看看$_FILES里有哪些参数
新建file_upload_html.html文件:
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>用户头像上传</h2> <p>用户姓名:张三</p> 现有头像:<img src="" onerror="this.src='./default.jpg'"> <form method="post" enctype="multipart/form-data"> <input type="file" name="photo"><br> <input type="submit" value="上传"> </form> </body> </html>
获取表单提交的参数,新建file_upload_object.php,代码如下
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/3 0003 * Time: 上午 11:33 */ require './file_upload_html.html'; //获取表单提交的参数 $file=isset($_FILES['photo'])?$_FILES['photo']:""; echo "<pre>"; print_r($file); echo "</pre>";
提交表单之后打印结果如下:

由此可知道上传文件类需要知道上传的文件名称,文件类型,错误标志位,上传的大小
因此我们写一个上传文件类需要知道这些属性,新建一个上传文件类,FileUpload.Class.php
代码如下:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/3/3 0003
* Time: 上午 10:52
*/
class FileUpload{
public $type=array(
'image/jpeg','image/pjpeg','image/png','image/x-png','image/gif'
);
public $maxSize=1048576;//1M=1024*1024
public $uploadSavePath="./uploads";
public $errorMessage="";
}2,文件上传类的方法
对文件上传类的属性根据自己业务的需求写一个方法进行管理,
比如上传大小的设置,上传保存路径的设置,方法名叫upload()
具体代码如下:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/3/3 0003
* Time: 上午 10:52
*/
class FileUpload{
private $type=array(
'image/jpeg','image/pjpeg','image/png','image/x-png','image/gif'
);//文件类型
public $maxSize=1048576;//1M=1024*1024,上传的容量
public $uploadSavePath="./uploads"; //上传保存的路径
public $errorMessage=""; //错误信息
public function upload($file){
//上传类首先得判断上传存不存在错误,错误信息有123467六种情况,0为正常上传
if($file['error']>0){
$errorMsg="错误信息为:";
switch ($file['error']){
case 1:$errorMsg.="文件大小超过了php.ini中upload_max_filesize选项限制的值";
break;
case 2:$errorMsg.="文件大小超过了表单中max_file_size选项指定的值!";
break;
case 3:$errorMsg.="文件只有部分被上传!";
break;
case 4:$errorMsg.="没有文件被上传!";
break;
case 6:$errorMsg.="找不到临时文件夹!";
break;
case 7:$errorMsg.="临时文件写入失败";
break;
default:$errorMsg.='未知错误!';
break;
}
return false;
}
//判断上传的文件是否属于$type内
if(!in_array($file['type'],$this->type)){
//不在所属类型内时
$this->errorMessage="未定义的文件上传类型";
return false;
}
//判断文件上传的大小不能超过所定义的大小
if($file['size']>$this->maxSize){
$this->errorMessage="超出上传所限制的最大上传容量";
return false;
}
//给上传的图片重命名
$newFileName=uniqid("php_").strrchr($file['name'],".");
//设置上传文件的全目录 ./uploads/2018-03-03
$allPath1=$this->uploadSavePath."/".date("Y-m-d");
$allPath=$this->uploadSavePath."/".date("Y-m-d")."/".$newFileName;
//判断这个目录是否存在
if(!file_exists($allPath1)){
mkdir($allPath1,'0777',true);
}
//移动
if(!move_uploaded_file($file['tmp_name'],$allPath)){
$this->errorMessage="文件上传失败";
}else{
return $allPath;
};
}
}3,文件上传处理
对类进行调用生成文件上传类的对象并打印错误信息
在file_upload_object.php里修改代码如下:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/3/3 0003
* Time: 上午 11:33
*/
require './FileUpload.class.php';
$file=isset($_FILES['photo'])?$_FILES['photo']:"";
$fileUpload=new FileUpload();
$allPath=$fileUpload->upload($file);
if(!$allPath){
//上传失败,打印错误信息
echo $fileUpload->errorMessage;
//结束运行
die();
}
require './file_upload_html.html';在html页面修改src属性:

代码如下:
<?php 现有头像:<img src="<?php echo $allFilePath; ?>" onerror="this.src='./default.jpg'">
点击选择文件,选好后点击上传,结果如下:

思考:很明显上传类的头像太大了,如何将上传的头像缩小一点?
(见[PHP]文件与图像教程,里面有详细操作步骤)
