文件的上传与下载
1.文件上传
- 将本地文件复制一份传送到网络的服务器中储存。
- 上传流程:
2.文件上传时需要注意的事项
- HTML 表单(form)部分
- 传输方式一定要用POST方法(POST方法传输数据更大)
- 需要指定表单传输编码格式
enctype='multipart/form-date'
- input的类型为file
<input type="file" name="" id="">
- PHP页面需要注意的
- 如果有文件上传,那么上传的文件在PHP脚本中不能用
$_POST
接收,必须用$_FILES
来接收,其他内容依然用$__POST
- php.ini文件有关上传的设置
- 注意:upload_max_filesize设置的值不可以超过post_max_size设置的值
- 接收结果:
- 如果有文件上传,那么上传的文件在PHP脚本中不能用
3.实现文件上传
- 判断错误号,如果是0 上传成功之后才能执行以下代码
- 判断上传的文件大小是否是允许的类型
- 判断上传文件的大小是否在允许的范围内
- 制作制定保存文件的目录
- 移动文件
die()
函数
- 作用: 停止程序并且输出()的的字符串内容
- @parma: string要输出的内容,可以省略
- 返回值:没有,作用是停止函数
in_array()
函数
move_uploaded_file
— 将上传的文件移动到新位置
<?php
// 判断错误号
// test 为上传时input所定义的名字
if($_FILES['test']['error'] == 0) {
// 判断上传文件的类型是否是允许的
$type = array('image/jpeg', 'image/png', 'image/gif');
if(in_array($_FILES['test']['type'], $type)) {
// 判断文件大小是否可以
echo "可用文件类型/n";
if($_FILES['test']['size'] <= 100000) {
// 制作制定保存目录
echo "可用文件大小/n";
$path = './uopload';
if(!file_exists($path)) {
mkdir($path);
echo "创建文件成功/n";
} else {
echo "文件夹存在/n";
}
// 移动文件
// move_uploaded_file这个函数要注意
// 参数一 要为tmp_name,为他临时储存的位置(包括了她的名字)
// 参数二 要移动到的文件位置,这个位置要包括名字
if(move_uploaded_file($_FILES['test']['tmp_name'], $path . './' . $_FILES['test']['name'])) {
echo '文件上传成功';
}
}
}
}
?>
封装成函数:
<?php
// @parma1 上传表单的名称
// @parma2 上传文件的类型(数组形式)
// @parma3 保存上传文件的目录
function upload($pic, $info, $path) {
$file = $_FILES[$pic];
$info = array();
if($file['error'] == 0) {
if(in_array($file['type'], $info)) {
if(!file_exists($path)) {
mkdir($path);
}
if(move_uploaded_file($file['tmp_name'], $path.'/'.$file['name'])) {
echo '上传成功';
}
}
}
}
?>
4.文件下载
-
header
函数 -
作用: 发送一个原生的HTTP头,在当前PHP页面使用
<header>
标签里的内容 -
功能:
-
跳转(暂时记住这个):
header('location:https://www.bilibili.com'); // 要给完整路径不然会认为是本地路径
-
// 实现下载
// 声明要下载文件的类型
header('Content-type: application/pdf');
// 对下载的文件进行描述并且指定下载文件的名称
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// 读取下载文件
readfile('original.pdf');
例如
要下载一张图片
-
前端
<a href="download.php">本地下载</a>
-
后端
<?php // 声明要下载文件的类型 // 类型为图片 header('Content-type: image/jpeg'); // 对下载的文件进行描述并且指定下载文件的名称 // 下载图片的名字(全名包括后缀) header('Content-Disposition: attachment; filename="Eva.jpg"'); // 读取下载文件 // 要/可供下载文件的位置(本地或网络) readfile('./概念图.jpg'); ?>
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/272415.html