上传类-$_FILE变量
上传表单的设置以及超级全局变量$_FILE
一.上传表单
1.上传表单和普通表单设置不通
创建上传表单1.php
<!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>上传</title> </head> <body> <form action="2.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="204800"> 上传图片:<input type="file" name="pic"> <button type="submit">上传</button> </form> </body> </html>

在这里:
(1)enctype表示提交的编码方式,multipart/form-data表示不对字符编码,使用上传功能必须使用这个参数
(2)隐藏字段中name="MAX_FILE_SIZE",强制上传文件的大小,单位是字节,value="204800"表示不能超过200kb,这个是软限制,级别略低
(3)在php.ini中有一个upload_max_filesize给出了文件上传的大小,默认是2M,这个是硬性限制,级别高,软限制高于硬限制会被自动忽略
二.$_FILE变量
1.选择一张图片作为上传基质,通过print_r输出结果
创建获取上传对象2.php
<?php print_r($_FILES);
选择一张图片1.png通过1.php上传查看图片信息
Array
(
[pic] => Array
(
[name] => 1.png
[type] => image/png
[tmp_name] => E:\Program\tmp\php90D0.tmp
[error] => 0
[size] => 82974
)
)
在这里:
(1)name表示文件原来的名称和后缀
(2)type表示文件类型,如果是图片,则有以下几种:
a)image/jpeg
b)image/pjpeg
c)image/png
d)image/x-png
e)image/gif
(3)tmp_name上传文件的临时名称,如果上传文件是一个很大的文件,将会返回一个none
(4)size表示上传文字的大小,单位为字节。如果上传一个很大的文件,将会返回0
三.检测并保存
1.使用is_uploaded_file函数判断是否上传成功
2.使用move_uploaded_file函数移动到指定目录
接收表单2.php
<?php //判断文件是否上传成功 if (is_uploaded_file($_FILES['pic']['tmp_name'])) { echo '上传成功'; //移动到指定目录内,并修改名称 if (move_uploaded_file($_FILES['pic']['tmp_name'], '123.png')) { echo '文件已经拷贝到指定目录,临时文件将被删除'; } }
PS1:函数会检测文件是否已经上传到临时空间,如果成功则反回真
PS2:函数会检测是否是一个上传文件,当执行完毕后,临时文件会移动到指定的目录,并删除临时文件
上传类-创建类之错误和类别,目录和路径
创建上传表单1.php并
<?php echo __DIR__; ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>上传</title> </head> <body> <form action="3.php" enctype="multipart/form-data" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="204800"> 上传图片:<input type="file" name="pic"> <button type="submit">上传</button> </form> </body> </html>
创建获取上传对象3.php
<?php require 'upload.php'; if (isset($_FILES['pic'])) { //获取上传对象 $file = Upload::getUpload('pic',204800); //输出上传的图片地址 echo $file->getPath(); } else { exit('警告:文件太大或未知错误'); }
创建图片上传类upload.php
<?php //上传类(图片) class Upload { //上传文件名 private $name; //上传的临时文件 private $tmp; //上传的错误编号 private $error; //上传的类型 private $type; //上传的类型列表 private $typeList; //表单限制文件的大小 private $maxSize; //上传文件目录(硬盘目录) private $dir; //上传的文件路径 private $path; //今天的日期 private $today; //构造方法 public function __construct($param, $maxSize) { //获取原来文件名字 $this->name = $_FILES[$param]['name']; //获取临时文件 $this->tmp = $_FILES[$param]['tmp_name']; //获取错误编号 $this->error = $_FILES[$param]['error']; //获取文件类型 $this->type = $_FILES[$param]['type']; //设置文件类型列表 $this->typeList = array( 'image/jpeg', 'image/png', 'image/gif', 'image/x-png', 'image/pjpeg' ); //限制文件的大小 $this->maxSize = $maxSize / 1024; //今天的日期 $this->today = date('y-m-d'); //设置上传目录,具体目录可以做成配置文件常量 $this->dir = __DIR__.'\\'.$this->today.'\\'; //判断文件错误编号 $this->checkError(); //判断文件类型 $this->checkType(); //设置上传目录 $this->setDir(); //保存文件 $this->setFile(); } //内部自我实现实例化,静态方法 public static function getUpload($param, $maxSize) { return new self($param, $maxSize); } //判断文件错误编号 private function checkError() { //当错误代码不为零时,发生错误 if (!empty($this->error)) { //依次判断 switch ($this->error) { case 1: exit('警告:文件大小超过了约定值!'); break; case 2: exit('警告:文件大小超过了'.$this->maxSize.'KB'); break; case 3: exit('警告:文件没有完全上传!'); break; case 4: exit('警告:没有文件上传!'); break; default : exit('警告:未知错误!'); } } } //判断文件类型 private function checkType() { if (!in_array($this->type, $this->typeList)) { exit('警告:文件类型不合法!'); } } //设置上传目录 private function setDir() { //判断指定的目录是否存在 if (!is_dir($this->dir)) { //不存在则创建这个目录 if (!mkdir($this->dir)) { exit('警告:目录创建失败!'); } } } //设置上传后的文件名 private function setName() { //得到文件名后缀 $postFix = explode('.', $this->name)[1]; //生成文件名 $name = md5(time().mt_rand(1,100)).'.'.$postFix; //设置新文件目录的地址 $this->path = $this->today.'/'.$name; //设置新文件目录地址 return $this->dir.$name; } //保存文件 private function setFile() { //判断文件是否上传成功 if (is_uploaded_file($this->tmp)) { //移动到指定目录内,并修改名称 if (!move_uploaded_file($this->tmp, $this->setName())) { exit('警告:保存失败'); } } else { exit('警告:上传失败!'); } } //获取图片地址 public function getPath() { return $this->path; } }
浙公网安备 33010602011771号