PHP与MySQL程序设计 第四版 第十五章 处理文件上传 笔记

这次更是好久没更新了,11月无更新,11月基本在写公司项目前端的js,前端还没怎么入门,这发展这么块,写得头晕了,还是基础的问题,写法的思想琢磨蛮久才懂一点。抛开js还是来整理我的php笔记吧,以后应该会有JS的笔记出来。

本章学习以下概念:
PHP的上传配置指令
$_FILES超级全局数组
is_uploaded_file()和move_uploaded_file()函数
脚本返回的错误信息
PEAR包HTTP_Upload概述 (一直都没有理会PEAR包。。)

244页 通过HTTP协议上传文件
通过web上传文件的方法于1995年11月得到正式标准化(PS:原来这还有一段故事),在HTML中增加一个新的媒体类型 multipart/from-data 来支持文件的上传,默认的表单enctype是 application/x-www-form-urlencoded ,在表单中用file 类型上传文件
<form action="upload.php" enctype="multipart/form-data">
<input type="text" value="zhanxingju.com">
<input type="file">
<input type="submit" value="提交">
</form>

245 通过php上传文件
需要在php.ini中配置一些与上传相关的指令

1.file_uploads = on/off  作用域:PHP_INI_SYSTEM (不同的作用域 可以使得这指令在不同的地方修改) 默认on
确定服务器上的php脚本是否可以接受文件上传

2.max_input_time = integer  作用域:PHP_INI_ALL  默认值 60
php脚本在注册一个致命错误前解析输入所花费的最长时间(超时的时间)

3.max_file_uploads = integer   作用域:PHP_INI_SYSTEM 默认值20
同时上传的文件数的上限

4.memory_limit = integer M  作用域:PHP_INI_ALL  默认值 16M (现在好像默认是200M了) 
脚本可以分配的最大内存量,以MB为单位

5.post_max_size = integer M 作用域:PHP_INI_PERDIR 默认值8M
对通过POST方法提交的数据大小设置了一个上限

6.upload_max_filesize = integer M 用域:PHP_INI_PERDIR 默认值2M
上传文件的最大大小,此指令必须小于post_max_size,因为它只应用于通过file输入类型传递的信息,而不应用于通过post实例传递的信息

7.upload_tmp_dir = string  作用域:PHP_INI_SYSTEM 默认值Null 
上传的临时文件的存放路径 比如 upload_tmp_dir="/tmp/phpuploads" 记住 这个目录对于拥有此服务器进程的用户必须是可写的。

246 $_FILES数组
$_FILES超级全局变量存储与通过一个php脚本上传到服务器的文件有关的信息
/* 以下内容的userfile为占位符,代表赋给文件上传表单元素的名字 */
$_FILES['userfile']['error'] 上传结果的信息 有五个返回值 (五个值在248页 上传错误信息)
$_FILES['userfile']['name'] 指定客户端机器上声明的文件最初的名字,包括扩展名
$_FILES['userfile']['size'] 上传的文件大小 单位是字节
$_FILES['userfile']['tmp_name'] 上传到服务器后为文件赋予的临时名
$_FILES['userfile']['type'] 客户端上传的文件MIME类型

247 php的文件上传函数
1.确定是否已上传文件
is_uploaded_file() 函数确定文件是否是post上传的 返回布尔值

2.移动已上传文件
move_uploaded_file()函数将已经上传文件从临时目录移动到最终目标 返回布尔值
boolean move_uploaded_file(sting filename,string destination)

248 上传错误信息
UPLOAD_ERR_OK 上传成功返回0
UPLOAD_ERR_INI_SIZE 如果试图上传的文件大小超出upload_max_filesize指令的值 返回1
UPLOAD_ERR_FORM_SIZE 如果试图上传的文件大小超出max_file_size指令的值 返回2
UPLOAD_ERR_PARTIAL 如果文件没有完全上传 返回3 网络错误并导致上传中断,可能会发生这种
UPLOAD_ERR_NO_FILE 如果用户没有指定上传的文件就提交 返回4
UPLOAD_ERR_NO_TMP_DIR 如果临时目录不存在返回 6 (不是5 5为何不定义?)
UPLOAD_ERR_CANT_WRITE 文件写入失败,无法写入磁盘。PHP 5.1.0 引入。返回7
UPLOAD_ERR_EXTENSION php的一个配置问题导致上传失败 返回8

注:文件上传和移动都必须由web服务器守护进程拥有者来完成,对临时目录和最终目录要有足够权限