- 文件上传与下载
- 文件上传
上传文件的method必须为post , enctype=”multipart/from-data” 二者缺一不可
doAction 中接收文件用_Files
$_FILES中有五个上传变量:
- name :上传文件名
- Type:上传文件MIME类型
- Tmp-name:上传到服务器的临时文件名
- Size:上传文件的大小
- Error:上传文件的错误号
Array(
[name] => php笔记.docx
[type] =>
[tmp_name] =>
[error] => 3
[size] => 0)
移动上传文件函数 move_uploaded_file($tempName,url)
复制文件到指定路径 copy($tempName,url)
- 服务器端配置php.ini
(1.) file_upload = on 支持http文件上传,否则文件上传不成功
(2.)upload_tmp_dir 临时文件保存的目录
(3.)post_max_size POST方式发送数据的最大值 默认为8M
(4.)upload_max_filesize 允许上传文件的最大值 默认为2M
(5.)max_file_uploads 允许以此上传的最大文件数 默认为20
- 上传文件错误号
(1)0 没有发生错误,文件上传成功
(2)1 上传的文件超过了php.ini中upload_max_filesize选项限制的值
(3)2 上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值
(4)3 文件只有部分被上传
(5)4 没有文件被上传
(6)6找不到临时文件
(7)7 文件写入失败
(8)8 上传的文件被PHP扩展程序中断
- 上传文件的客户端限制(尽量不使用,对会程序的人来说没用可以直接在前端改掉)
- 通过表单隐藏域来限制上传文件的最大值
<input type=’hidden’ name=’MXA_FILE_SIZE’VALUE=’限制的最大字节数’/>
- 通过accept属性来限制上传文件的类型
<input type=’file’name=’myFile’accept=’文件的MIME类型’/>
- 上传文件的服务器端限制
- 限制上传文件大小
- 限制上传文件类型
- 检测是否为真实图片类型
- 检测是否为HTTP POST方式上传
Pathinfo($fileName,$pathinfo_extension)获取文件拓展名函数
In_array($ext,$allowExt)判断$ext是否在数组$allowExt中
Is_uploaded_file($fileName)判断是否是通过HTTP POST方式上传的文件
Getimagesize($fileName)判断图片的类型 若为真则返回图片数组信息 否则返回false
File_exists($fileName)判断文件是否已经存在
Mkdir($fileName,0777,ture)创建名为fileName的文件给予其最大权限0777
Chmod($fileName,true)给这个文件授权
MD5($var)加密成MD5格式密文
Uniqid(mictotime(true),true)根据微秒时间生成唯一一个ID
Move_uploaded_file($fileName,$url)移动临时上传文件至路径url
Copy($fileName,$url)复制临时上传文件至路径url
is_set($var) 判断变量是否存在 存在返回TRUE不存在返回false
Array_fileter($array) 过滤数组中的空元素
Array_values($array) 将原数组中的元素取出重新排列一个数组 可以将过滤后的数组中心定义下标
Basename($url) 返回路径中的文件名部分
注意: 使用数组时尽量判断数组是否为空用empty($var)/isset($var)都可以 如果不判断的话容易出错
2文件下载
- 通过<a href=”#”></a> 来下载 浏览器不支持的格式会在网页上下载,而类似图片那种浏览器支持的格式会直接在网页上显示
- 通过程序下载,在a标签上加上<a href=”doAction.php?filename=url”></a>
doAction: $filename=$__GET[‘filename’];
Header(‘content-disposition:attachment;filename=’.basename($filename));//告诉网页是以附件方式下载
Herder(‘content-length:’.filesize($filename));//告诉网页文件大小
Readfile($filename);