版权声明:独学而无友,则孤陋寡闻。q群582951247 https://blog.csdn.net/mp624183768/article/details/84134034
上传
/**
* 单文件上传
* @param array $fileInfo 文件信息 是一个数组
* @param string $uploadPATH 文件上传默认路径
* @param bool $imageFlag 是否检测真实图片
* @param array $allowExt 允许上传的文件类型
* @param int $maxSize 允许上传文件的最大值
* @return bool|string
*/
function upload_file(array $fileInfo,$uploadPATH='./uploads',bool $imageFlag=true,array $allowExt=array('jpeg','jpg','png','gif'),int $maxSize=2097152){
define("UPLOAD_ERRS",
[
UPLOAD_ERR_INI_SIZE=>"超过了PHP配置文件中upload_max_filesizez",
UPLOAD_ERR_FORM_SIZE=>"超过了PHP配置文件中upload_max_filesizez",
UPLOAD_ERR_PARTIAL=>"文件部分被上传",
UPLOAD_ERR_NO_FILE=>"没有选择上传文件",
UPLOAD_ERR_NO_TMP_DIR=>"没有临沭目录",
UPLOAD_ERR_CANT_WRITE=>"文件不能被写入",
UPLOAD_ERR_EXTENSION=>"扩展名错误",
'not_true_image'=>"文件不是真实图片",
'not_http_post'=>"文件不是通过HTTP POST上传的",
'move_error'=>"文件不是通过HTTP POST上传的",
'move_error'=>"文件移动失败",
]
);
//检测上传是否有错误
if($fileInfo["error"]==UPLOAD_ERR_OK){
//检测文件上传类型
$ext=strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));
/** @var TYPE_NAME $allowExt */
if(!in_array($ext,$allowExt)){
echo UPLOAD_ERRS[UPLOAD_ERR_EXTENSION];
return false;
}
//检测上传大小是否符合规范
if($fileInfo['size']>$maxSize){
echo UPLOAD_ERRS[UPLOAD_ERR_INI_SIZE];
return false;
}
//检测是否是真实图片
if($imageFlag){
if(@!getimagesize($fileInfo['tmp_name'])){
echo UPLOAD_ERRS['not_true_image'];
return false;
}
}
//检测文件是否通过HTTP POST方式上传来的
if(!is_uploaded_file($fileInfo['tmp_name'])){
echo UPLOAD_ERRS['not_http_post'];
return false;
}
//检测目标目录是否存在,不存在则创建
if(!is_dir($uploadPATH)){
mkdir($uploadPATH,0777,true);
}
//生存唯一文件名,防止重命名产生覆盖
$uniName=md5(uniqid(microtime(true),true)).".".$ext;
$dest=$uploadPATH.DIRECTORY_SEPARATOR.$uniName;
//移动文件
if(@!move_uploaded_file($fileInfo['tmp_name'],$dest)){
echo UPLOAD_ERRS['move_error'];
return false;
}
echo '文件上传成功';
return $dest;
}else{
$megs=UPLOAD_ERRS[$fileInfo["error"]];
echo $megs;
}
}
upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="doUpload.php" method="post" enctype="multipart/form-data">
<input type="file" name="myFile" id="">
<input type="submit" value="立即上传">
</form>
</body>
</html>
doUpload.php
<?php
/**
* Created by PhpStorm.
* User: liuan
* Date: 2018-11-15 0015
* Time: 14:36
*/
require_once 'func.php';
$fileInfo=$_FILES['myFile'];
var_dump(upload_file($fileInfo));
下载
/**
* 下载文件
* @param string $filename 文件名
* @param array $allowDownExt 允许下载的文件类型
* @return void
*/
function down_file(string $filename,array $allowDownExt=['jpg','jpeg','png','gif','txt','html','php','rar','zip']){
if(!is_file($filename)||!is_readable($filename)){
return false;
}
//检测文件类型是否允许下载
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(!in_array($ext,$allowDownExt)){
return false;
}
//通过header() 发送头信息
//告诉浏览器输出的是字节流
header('content-type:application/octet-stream');
//告诉浏览器返回的文件大小是按照字节进行计算的
header('Accept-Ranges:bytes');
//告诉浏览器返回的文件大小
header('Accept-Lenth:'.filesize($$filename));
//告诉浏览器 文件作为附件处理 告诉浏览器最终下载完的文件名称
header('Content-Disposition:attachment;filename=liuan_'.basename($filename));
//读取文件中的内容
readfile($filename);
exit;
}
/**
* 下载文件
* @param string $filename 文件名
* @param array $allowDownExt 允许下载的文件类型
* @return void
*/
function down_file1(string $filename,array $allowDownExt=['jpg','jpeg','png','gif','txt','html','php','rar','zip']){
if(!is_file($filename)||!is_readable($filename)){
return false;
}
//检测文件类型是否允许下载
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
if(!in_array($ext,$allowDownExt)){
return false;
}
//通过header() 发送头信息
//告诉浏览器输出的是字节流
header('content-type:application/octet-stream');
//告诉浏览器返回的文件大小是按照字节进行计算的
header('Accept-Ranges:bytes');
//告诉浏览器返回的文件大小
header('Accept-Lenth:'.filesize($filename));
//告诉浏览器 文件作为附件处理 告诉浏览器最终下载完的文件名称
header('Content-Disposition:attachment;filename=liuan_'.basename($filename));
//读取文件中的内容
//规定每次读取文件的字节数为1024字节 直接输出shuju
$read_buffer=1024;
$sum_buffer=0;
$handle=fopen($filename,'rb');
$filesize=filesize($filename);
while(!feof($handle)&&$sum_buffer<$filesize){
$sum_buffer+=$read_buffer;
echo "round($sum_buffer/$filesize,2)","<br/>";
echo fread($handle,$read_buffer);
}
fclose($handle);
exit;
}
download.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>测试下载</title>
</head>
<body>
<a href="discuzcj_zdy_v9.5.zip">下载1.zip</a>
<br>
<a href="download.php?filename=2.zip">下载2.zip</a>
<a href="download.php?filename=3.zip">下载3.zip 有进度</a>
</body>
</html>
download.php
<?php
echo dirname(__FILE__);
require_once '../fileSystem/lib/func.php';
$filename=$_GET['filename'];
down_file1($filename);