我们在学习PHP文件上传之前,先了解三个步骤:
第一:学习如何控制上传文件(配置php.ini文件);
第二:学习对上传文件的判断(判断上传文件的格式和大小);
第三:学习文件上传操作的方法.
(一)了解php.ini文件中文件上传的配置信息
PHP中通过php.ini文件对上传文件进行控制,包括:是否支持上传,上传文件的临时目录,上传文件的大小,指令执行的时间,指令分配的内存空间.
##############
##File Uploads##
##############
#Whether to allow HTTP file uploads.
file_uploads = On
[注释]file_uploads:如果值是on.说明服务器支持文件上传;如果为off,则不支持.一般默认是支持的,这个不用修改.
#Temporary directory for HTTP uploaded files (will use system default if not specified).
upload_tmp_dir = "H:\XAMPP\xampp\tmp"
[注释]upload_tmp_dir:上传文件临时目录.在文件被成功上传之前,文件首先被存放到服务器端的临时目录中.多数使用系统默认目录,但是也可以自行设置.
#Maximum allowed size for uploaded files
upload_max_filesize = 128M
#[注释]upload_max_filesize:服务器允许上传文件的最大值,以M为单位.系统默认为128M,如果网站上需要限制上传的数据,那么要修改这个值.
上述是php中关于File_Uploads项中与上传相关选项参数设置说明,除了File_Uploads项的内容外,在php.ini中还有其他几个选项会影响文件的上传.
#################
##Resource Limits##
#################
#Maximum execution time of each script ,in seconds
max_execution_time = 60
#[注释]PHP中一个指定所要执行的最大时间,单位为秒.该选项在上传超大文件时必须要修改,否则即使上传文件在服务器允许范围内,但是超过了指令所要执行的最大时间,仍然无法实现上传.
#Maximum amount of memory a script may consume (128MB)
memory_limit = 128M
#[注释]memory_limit: PHP中一个指令所要分配的内存空间,单位是M.它的大小同样会影响超大文件的上传.
第二:如何对上传文件进行解析(判断上传文件的格式和大小);
对文件上传进行判断应用的是全局变量$_FILES,它是一个数组,它包含所有上传的文件信息.
1)$_FILES[filename][name] 存储上传文件的文件名.
2)$_FILES[filename][size] 存储文件的大小.单位为字节.
3)$_FILES[filename][tmp_name] 存储文件在临时目录中使用的文件名.
4)$_FILES[filename][type] 存储上传文件的MIME类型,MIME类型规定各种文件格式的类型.
5)$_FILES[filename][error] 存储于文件上传相关的错误代码,其返回值有5中. 0:表示没有任何错误,文件上传成功....
第三:如何进行文件上传操作
PHP中应用move_uploaded_file()函数实现文件上传.但是,在执行文件上传之前,为了防止潜在的攻击对原本不能通过脚本交互的文件进行非发管理,可以先应用is_uploaded_file()函数进行判断指定文件是否是通过HTTP POST上传的,如果是则返回值true,可以继续执行文件上传操作,否则将不能够继续执行.
1: is_uploaded_file()函数用于判断指定的文件是否是通过HTTP POST上传的.
语法: bool is_uploaded_file(string filename)
参数filename必须指定类似于$_FILES['filename']['tmp_name']的变量,不可以使用从客户端上传的文件名$_FILES['filename']['name'].
[注]通过is_uploaded_file()函数对上传文件进行判断,可以确保恶意的用户无法欺骗脚本去访问不能访问的文件.
2:move_loaded_file()函数将指定的文件上传服务器中指定的位置.如果成功返回true,否则返回false.
语法: bool_uploaded_file(string filename,string destination)
参数filename指定上传文件的临时文件名,即$_FILES[tmp_name];参数destination指文件上传后保存的新路径和名称.