上传
客户端设置
- 客户端使用form表单上传文件,在form表单中必须指明enctype和method属性的值
<html>
<head>
<title>post</title>
</head>
<body>
<form action="xx.php" mothod="post" enctype="multipart/form-data">
<input type="file" value="myfile" /><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
服务端设置
file_uploads = On //默认允许HTTP文件上传,此选项不能设置为OFF
upload_tmp_dir= //文件上传时存放文件的临时目录
upload_max_filesize = 20M //设定单个文件上传的大小,必须小于post_max_size
post_max_size = 19M //允许POST表单的数据最大大小
$_FILES['upload_file']['name'] //带扩展名的原始文件名
$_FILES['upload_file']['size'] //文件大小
$_FILES['upload_file']['tmp_name'] //临时文件名
$_FILES['upload_file']['error'] //上传文件时的错误信息
$_FILES['upload_file']['type'] //上传文件的类型
//type是上传文件时原始信息里的content_type,即MIME,有image/gig、text/html等
//error一般有5中类型:
//0 上传成功
//1 文件大小超过了upload_max_filesize
//2 文件大小超过了表单总MAX_FILE_SIZE设定的值
//3 只有部分被上传
//4 没有上传任何文件
1. 判断uploads这个文件夹存在
2. 判断error的值
3. 判断文件后缀是否合法
4. 判断MIME的类型和子类型是否合法
5. 判断文件大小
6. 对文件进行重命名
7. 移动
下载
对于php无法解析的类型
<a href="http://www.aa.com/xx.rar">下载</a >
对于php能解析的文件(同时为了安全性)
<?php
header("Content-type:text/html;charset=utf-8");
$file_name = "文件.exe";
$file_name=iconv("utf-8","gb2312",$file_name); //解决中文不能显示的问题
$file_dir = "/public/www/download/";
$file_path = $file_dir.$file_name;
if (!file_exists($file_path)) { //检查文件是否存在
echo "文件找不到";
exit;
} else {
$file = fopen($file_path,"r"); // 打开文件
// 输入文件标签,下面4个Header是必须的
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_path));
Header("Content-Disposition: attachment; filename=" . $file_name);
// 输出文件内容
echo fread($file,filesize($file_path));
fclose($file);
exit;
}
?>
网友评论