doaction5.php,php实现文件下载跟多文件上传

php实现文件下载和多文件上传

文件下载:

html:

下载1.rar

下载1.jpg

通过程序下载1.jpg

下载nv.jpg

php处理:

$filename=$_GET['filename'];

//设置下载文件名

header('content-disposition:attachment;filename='.basename($filename));

header('content-length:'.filesize($filename));

readfile($filename);

文件上传:

html代码:

请选择您要上传的文件:

请选择您要上传的文件:

请选择您要上传的文件:

请选择您要上传的文件:

请选择您要上传的文件:

php代码:

common.func.php

/**

* 得到文件扩展名

* @param string $filename

* @return string

*/

function getExt($filename){

return strtolower(pathinfo($filename,PATHINFO_EXTENSION));

}

/**

* 产生唯一字符串

* @return string

*/

function getUniName(){

return md5(uniqid(microtime(true),true));

}

upload.func1.php

/**

* 构建上传文件信息

* @return unknown

*/

function getFiles(){

$i=0;

foreach($_FILES as $file){

if(is_string($file['name'])){

$files[$i]=$file;

$i++;

}elseif(is_array($file['name'])){

foreach($file['name'] as $key=>$val){

$files[$i]['name']=$file['name'][$key];

$files[$i]['type']=$file['type'][$key];

$files[$i]['tmp_name']=$file['tmp_name'][$key];

$files[$i]['error']=$file['error'][$key];

$files[$i]['size']=$file['size'][$key];

$i++;

}

}

}

return $files;

}

/**

* 针对于单文件、多个单文件、多文件的上传

* @param array $fileInfo

* @param string $path

* @param string $flag

* @param number $maxSize

* @param array $allowExt

* @return string

*/

function uploadFile($fileInfo,$path='./uploads',$flag=true,$maxSize=1048576,$allowExt=array('jpeg','jpg','png','gif')){

//$flag=true;

//$allowExt=array('jpeg','jpg','gif','png');

//$maxSize=1048576;//1M

//判断错误号

if($fileInfo['error']===UPLOAD_ERR_OK){

//检测上传得到小

if($fileInfo['size']>$maxSize){

$res['mes']=$fileInfo['name'].'上传文件过大';

}

$ext=getExt($fileInfo['name']);

//检测上传文件的文件类型

if(!in_array($ext,$allowExt)){

$res['mes']=$fileInfo['name'].'非法文件类型';

}

//检测是否是真实的图片类型

if($flag){

if(!getimagesize($fileInfo['tmp_name'])){

$res['mes']=$fileInfo['name'].'不是真实图片类型';

}

}

//检测文件是否是通过HTTP POST上传上来的

if(!is_uploaded_file($fileInfo['tmp_name'])){

$res['mes']=$fileInfo['name'].'文件不是通过HTTP POST方式上传上来的';

}

if($res) return $res;

//$path='./uploads';

if(!file_exists($path)){

mkdir($path,0777,true);

chmod($path,0777);

}

$uniName=getUniName();

$destination=$path.'/'.$uniName.'.'.$ext;

if(!move_uploaded_file($fileInfo['tmp_name'],$destination)){

$res['mes']=$fileInfo['name'].'文件移动失败';

}

$res['mes']=$fileInfo['name'].'上传成功';

$res['dest']=$destination;

return $res;

}else{

//匹配错误信息

switch ($fileInfo ['error']) {

case 1 :

$res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';

break;

case 2 :

$res['mes'] = '超过了表单MAX_FILE_SIZE限制的大小';

break;

case 3 :

$res['mes'] = '文件部分被上传';

break;

case 4 :

$res['mes'] = '没有选择上传文件';

break;

case 6 :

$res['mes'] = '没有找到临时目录';

break;

case 7 :

case 8 :

$res['mes'] = '系统错误';

break;

}

return $res;

}

}

doAction5.php

//print_r($_FILES);

header("content-type:text/html;charset=utf-8");

require_once 'upload.func1.php';

require_once 'common.func.php';

$files=getFiles();

// print_r($files);

foreach($files as $fileInfo){

$res=uploadFile($fileInfo);

echo $res['mes'],'
';

$uploadFiles[]=$res['dest'];

}

$uploadFiles=array_values(array_filter($uploadFiles));

print_r($uploadFiles);

上面是通过函数实现,下载封装成为类:

html:

请选择您要上传的文件:

upload.class.php

class upload{

protected $fileName;

protected $maxSize;

protected $allowMime;

protected $allowExt;

protected $uploadPath;

protected $imgFlag;

protected $fileInfo;

protected $error;

protected $ext;

/**

* @param string $fileName

* @param string $uploadPath

* @param string $imgFlag

* @param number $maxSize

* @param array $allowExt

* @param array $allowMime

*/

public function __construct($fileName='myFile',$uploadPath='./uploads',$imgFlag=true,$maxSize=5242880,$allowExt=array('jpeg','jpg','png','gif'),$allowMime=array('image/jpeg','image/png','image/gif')){

$this->fileName=$fileName;

$this->maxSize=$maxSize;

$this->allowMime=$allowMime;

$this->allowExt=$allowExt;

$this->uploadPath=$uploadPath;

$this->imgFlag=$imgFlag;

$this->fileInfo=$_FILES[$this->fileName];

}

/**

* 检测上传文件是否出错

* @return boolean

*/

protected function checkError(){

if(!is_null($this->fileInfo)){

if($this->fileInfo['error']>0){

switch($this->fileInfo['error']){

case 1:

$this->error='超过了PHP配置文件中upload_max_filesize选项的值';

break;

case 2:

$this->error='超过了表单中MAX_FILE_SIZE设置的值';

break;

case 3:

$this->error='文件部分被上传';

break;

case 4:

$this->error='没有选择上传文件';

break;

case 6:

$this->error='没有找到临时目录';

break;

case 7:

$this->error='文件不可写';

break;

case 8:

$this->error='由于PHP的扩展程序中断文件上传';

break;

}

return false;

}else{

return true;

}

}else{

$this->error='文件上传出错';

return false;

}

}

/**

* 检测上传文件的大小

* @return boolean

*/

protected function checkSize(){

if($this->fileInfo['size']>$this->maxSize){

$this->error='上传文件过大';

return false;

}

return true;

}

/**

* 检测扩展名

* @return boolean

*/

protected function checkExt(){

$this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));

if(!in_array($this->ext,$this->allowExt)){

$this->error='不允许的扩展名';

return false;

}

return true;

}

/**

* 检测文件的类型

* @return boolean

*/

protected function checkMime(){

if(!in_array($this->fileInfo['type'],$this->allowMime)){

$this->error='不允许的文件类型';

return false;

}

return true;

}

/**

* 检测是否是真实图片

* @return boolean

*/

protected function checkTrueImg(){

if($this->imgFlag){

if(!@getimagesize($this->fileInfo['tmp_name'])){

$this->error='不是真实图片';

return false;

}

return true;

}

}

/**

* 检测是否通过HTTP POST方式上传上来的

* @return boolean

*/

protected function checkHTTPPost(){

if(!is_uploaded_file($this->fileInfo['tmp_name'])){

$this->error='文件不是通过HTTP POST方式上传上来的';

return false;

}

return true;

}

/**

*显示错误

*/

protected function showError(){

exit(''.$this->error.'');

}

/**

* 检测目录不存在则创建

*/

protected function checkUploadPath(){

if(!file_exists($this->uploadPath)){

mkdir($this->uploadPath,0777,true);

}

}

/**

* 产生唯一字符串

* @return string

*/

protected function getUniName(){

return md5(uniqid(microtime(true),true));

}

/**

* 上传文件

* @return string

*/

public function uploadFile(){

if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){

$this->checkUploadPath();

$this->uniName=$this->getUniName();

$this->destination=$this->uploadPath.'/'.$this->uniName.'.'.$this->ext;

if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){

return $this->destination;

}else{

$this->error='文件移动失败';

$this->showError();

}

}else{

$this->showError();

}

}

}

doAction6.php

header('content-type:text/html;charset=utf-8');

require_once 'upload.class.php';

$upload=new upload('myFile1','imooc');

$dest=$upload->uploadFile();

echo $dest;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值