一.文件上传
01_action.php — 代码
var_dump($_POST);
var_dump($_FILES); //一定要记得加上'_' !!
//只要脚本没有执行结束,临时目录中的文件则不会被删除
//如果要从临时目录中拽出文件就用rename
rename($_FILES['pic']['tmp_name'], './www.jpg');
//把$_FILES中pic里面的tmp_name移动到当前目录下的www.jpg
//tmp_name是临时文件
file.html — 代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> <!-- <meta charset="utf-8">一定要写,不然就会乱码! -->
<title>up</title>
</head>
<body>
<form action="01_action.php" method="POST" enctype="multipart/form-data">
<!-- 上传文件一定要写enctype="multipart/form-data-->
<title>up</title>
<input type="text" name="user" id="">
<input type="file" name="pic" id="">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- MAX_FILE_SIZE上传文件最大值 -->
<input type="submit" value="提交">
</form>
</body>
</html>
//和php配置文件的相关的选项:
//upload_max_filesize
//允许上传文件大小的最大值
//file_uploads=On
// 允许文件上传
//upload_tmp_dir 文件上传的临时目录
//max_file_uploads
//允许最大上传文件个数
//post_max_size
//post最大传输内容
file.html — 代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> <!-- <meta charset="utf-8">一定要写,不然就会乱码! -->
<title>up</title>
</head>
<body>
<form action="02_do_upload.php.php" method="POST" enctype="multipart/form-data">
<!-- 上传文件一定要写enctype="multipart/form-data-->
<title>up</title>
<input type="text" name="user" id="">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<!-- MAX_FILE_SIZE上传文件最大值 -->
<input type="file" name="pic" id="">
<input type="submit" value="提交">
</form>
</body>
</html>
02_do_upload.php — 代码
header('Content-type:text/html;charset=utf-8');
//接收用户上传的文件
var_dump($_FILES['pic']);
var_dump($_POST);
// 1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
$error = $_FILES['pic']['error']; //把$_FILES['pic']['error']赋值给变量$error
if($error > 0){
//上传文件有问题报告问题
switch($error){
// case 0: echo '上传成功'; break;
case 1: echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值'; break;
case 2: echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; break;
case 3: echo '文件只有部分被上传'; break;
case 4: echo '没有文件被上传'; break;
case 6: echo '找不到临时文件夹'; break;
case 7: echo '文件写入失败'; break;
}
}
// 2.判断上传文件的类型是否符合要求
//2.1定义允许上传的类型
$type = array('image/png','image/jpg','image/jpeg','image/gif');
$pictype = $_FILES['pic']['type'];
if(!in_array($pictype, $type)){
die('上传的文件类型不符合要求..');
}
// 3.判断上传文件的大小是否符合要求
//3.1定义允许上传文件的大小
$filesize = 200000;
$size = $_FILES['pic']['size']; // 把$_FILES['pic']['size']赋值给变量$size
//3.2判断上传的文件大小是否超过了允许的大小
if($size > $filesize){
die('文件太大了,请换一张..');
}
// 4.创建上传成功后保存的目录
//4.1定义一个保存的目录
$path = './upload';
//4.2判断目录是否存在.不存在就创建
if(!file_exists($path)){
mkdir($path);
}
// 5.上传上来的图片 不能重名 重新命名
//5.1获取文件上传的后缀
$suffix = strrchr($_FILES['pic']['name'],"."); //suffix 后缀
//strrchr查找.最后出现的位置并返回从该位置到字符串结尾的所有字符;
echo $suffix;
do{
//5.2拼接文件新名称
$name = time().mt_rand(1,1000).uniqid().$suffix;
}while(file_exists($path.'/'.$name));
echo $name."<br/>";
// echo uniqid();
// strrchr():函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符;
// 注意:是最后一次出现的位置。
// 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名)
if(move_uploaded_file($_FILES['pic']['tmp_name'],$path.'/'.$name)){
echo '上传文件成功';
} else {
echo '上传失败';
}
制作文件上传函数
php代码
header('Content-type:text/html;charset=utf-8');
// 1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
// 2.判断上传文件的类型是否符合要求
//3.判断上传文件的大小是否符合要求
// 4.创建上传成功后保存的目录
//5.上传上来的图片 不能重名 重新命名
// 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名)
//制作文件上传函数
/*
@param1 表单名称
@param2 可选参数 上传成功保存的路径
@param3 可选参数 上传文件大小
@param4 可选参数 长传文件的类型
*/
$result = upload('pic','./wanghui');
var_dump($result);
function upload($pic,$path = './wanghui',$size = 20000,$type = array('image/png','image/jpg','image/jpeg','image/gif')) {
//接收上传文件的数组
$file = $_FILES[$pic];
// 1.判断是否上传成功,判断错误号,是否从客户端上传到系统临时目录过程中成功
if($file['error'] > 0){
//上传文件有问题报告问题
switch($file['error']){
// case 0: echo '上传成功'; break;
case 1:
return '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
case 2:
return '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
case 3:
return '文件只有部分被上传';
case 4:
return '没有文件被上传';
case 6:
return '找不到临时文件夹';
case 7:
return '文件写入失败';
}
}
// 2.判断上传文件的类型是否符合要求
if(!in_array($file['type'], $type)){
return ('上传的文件类型不符合要求..');
}
//3.判断上传文件的大小是否符合要求
if($file['size'] > $size){
return ('文件太大了,请换一张..');
}
// 4.创建上传成功后保存的目录
if(!file_exists($path)){
mkdir($path);
}
//处理路径中最后的斜线问题
$path = rtrim($path,'/\\'); //rtrim是去除一个字符串尾部空格,这里是去除'/'和'\'因为linux中路径是'\'
//5.上传上来的图片 不能重名 重新命名
$suffix = strrchr($file['name'],'.');
do {
$newName = time().mt_rand(1,1000).uniqid().$suffix;
}while(file_exists($path.'/'.$newName));
// 6.移动文件(从垃圾目录中移动到指定的目录中并且图片要求重命名)
//定义一个返回数组
$info = array();
if(move_uploaded_file($file['tmp_name'],$path.'/'.$newName)){
//返回一个数组 数组中包含 图片名称 图片路径 图片路径_名称
$info['name'] = $newName;
$info['path'] = $path;
$info['pathName'] = $path.'/'.$newName;
return $info;
}else{
return '未知错误';
}
}
文件下载
文件下载 — html代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>download</title>
</head>
<body>
<a href="./05_download.php">迅雷下载</a>
<a href="wireshark-win32_cn.zip">软件下载</a>
</body>
</html>
文件下载 — php代码
//声明要下载文件的类型
// header('Content-type: application/pdf');
//设置编码为了让IE浏览器兼容
// //将字符串安装指定的编码进行转换
// $newStr = iconv('utf-8','gbk',$str);
//对下载文件进行描述并且制定下载文件的名称 GBK包含全部中文字符
//iconv('输入的字符集','输出的字符集','要转换的字符串') ------> 字符串按要求的字符编码来转换
header('Content-Disposition: attachment; filename="huihui.jpg"');
//读取需要下载的文件
readfile('./upload/15999226501315f5ce1da4cd8b.jpg');
header('location:./file.html');//点击跳转到本地某一指定需要跳转的路径页面 --- 一点击就跳转