这篇文章主要讲的是关于文件上传与下载的涉及到的一些知识,在这里总结一下,方便以后自己查阅。
一、文件上传
(1)php.ini配置文件
//之前有一个朋友找我一起翻译php.ini文件,当时不以为然,觉得这些配置不懂得时候就上网搜搜就行了,但通过最近练手写模块开发的时候,发现有些东西如果你不知道,不去了解那么你就可能永远也接触不到那个点上。在php.ini中有很多辅助开发以及其他方面的相关配置,了解这些东西,个人觉得能使你对php有一种直观的理解,一种有点到线再到面的全局意识,基于此,在php的学习中,你会发现你需要什么,哪方面有什么不足。
进入正文,在php中实现小文件上传(2MB一下),是不需要在php.ini中修改相关配置的。如果想实现大文件上传,有以下的3部分内容需要进行配置:
a、Resource limits(译:资源限制)
参数 | 描述 |
max_execution_time | 每个脚本页面完成执行操作的最大时间,单位是秒,设置为-1,则无限制 |
max_input_time | 每个脚本页面处理请求数据的最大时间,单位是秒,也可以设置为-1 |
memory_limit | 一个脚本页所能消耗的最大内存 |
//一般如果出现脚本页运行内存过大而导致的错误,不建议更改memory选项,这时候应该优先把页面的资源如大数组、相关对象释放掉或者设置为空。
b、post_max_size
该参数指PHP通过表单POST所能接收的最大值,包括表单中的所有项。
c、File Uploads
File Uploads块是专为文件上传设置。
参数 | 描述 |
file_uploads | 是否允许HTTP上传,默认为On,即为开启,无需修改 |
upload_tmp_dir | 文件上传时的临时存储目录,如果没指定就会用系统默认的临时文件夹 |
upload_max_filesize | 允许上传文件的最大值 |
(2)上传表单的设置
//先来一段简单的上传代码
<form method=”post” action=”” enctype=”multipart/form-data”>
<input tupe=”hidden” name=”MAX_FILE_SIZE” value=”1024000”>
<input name=”filename” type=”file” />
<input name=”submit” value=”submit”>
</form>
上面代码添加了一个hidden隐藏域,name值为MAX_FILE_SIZE,value是允许上传的最大字节数,当上传文件超过1MB时,$_FILES中的error值将返回2.该隐藏域的作用不是真正去限制上传文件的大小,它的作用在于避免用户误传了大文件而陷入了无尽的等待。
(3)预定义变量$_FILES(二维数组)
在PHP中使用$_FILES可以获取上传文件的相关信息,当然,前提是你的php.ini和表单设置没有出错。
参数 | 描述 |
$_FILE[filename][‘name’] | 上传文件的文件名 |
$_FILE[filename][‘size’] | 文件大小 |
$_FILE[filename][‘tmp_name’] | 文件上传时,首先在临时文件中被保存成一个临时文件,该变量为文件名 |
$_FILE[filename][‘type’] | 上传文件的类型,注意不是后缀 |
$_FILE[filename][‘error’] | 存储了文件的错误代码 0:上传成功;1:文件大小超出ini设置;2:文件大小超出表单设置 3:文件没有被全部上传;4:没有文件被上传;6:找不到临时文件 7:文件写入失败 |
(4)上传文件函数
bool move_uploaded_file(string filename,string destination)
filename:上传文件的临时文件名,即$_FILES[‘tmp_name’]
destination:上传后保存的新的路径和名称
//在php中,出于安全考虑,文件上传时首先被保留到指定的临时目录,move_uploaded_file()函数只是将文件换个地方保存。
(5)多文件上传
只是单文件上传的一种简单变换,form表单中,只需要将表单中的文件域使用数组命名即可:
<input name=”filename[]” type=”file” / >
<input name=”filename[]” type=”file” / >
.....
处理文件则通过循环遍历的方式获取文件的信息:
$_FILE[filename][‘name’][$i]
....
二、文件下载
(1)超链接:
将文件的相对路径或者绝对路径直接作为超链接即可。
(2)通过header()函数
header()函数属于HTTP函数,它的作用是发送一个原始的HTTP报头,在PHP程序中有很多功能,详情可以参考
http://www.blue1000.com/bkhtml/c19/2010-11/69601.html