php实现文件上传与下载(上)
文件上传:也就是将客户端的文件上传到服务器端,在将服务器端的临时文件移动到指定目录即可。主要思维就是先定义获取$_FILES中的二维数组变量,可以每次都用二维数组获取,也可以将第一维的放入一个数组变量中,然后每次获取该数组变量中的值,简化代码量----> 判断错误号是否为0或者是UPLOAD_ERR_OK为真时表示没有错误,可以上传----->将服务器上的临时文件移动到我们的指定目录下,叫什么名字,移动成功返回true,用move_uploaded_file($临时文件名,$目的地)----->另外一种方式就是用copy($临时变量名,$目的地)函数;
$_FILES中保存这儿上传文件的信息,这是一个二维数组,第一维当然就是上传进来的文件的名称了,第二维就是该文件的相关信息了,上传之后就可以打印该数组中的参数进行查看---用print_r($_FILES),可以看到里边的内容有:
name:上传文件的名称;
type:上传文件的MIME类型;
tmp_name:上传到服务器上的临时文件名;//很重要的,因为以后在服务器上操纵的就是这个文件
size:上传文件的大小;
error:上传文件的错误号,成功为0,。
服务器端配置---php.ini:
file_uploads=on,支持http上传;
upload_tmp_dir=,临时文件保存的目录;
upload_max_filesize= 2M ;允许上传文件的大小;
max_file_uploads=20; 允许一次上传文件数目,默认为20;
max_execution_time=-1;设置脚本被解析终止之前允许的最大执行秒数,防止程序太差(例如死循环)而占尽服务器资源;
max_input_time=60;脚本解析输入数据允许的最大秒数;
max_input_nesting_level=64,设置输入变量的嵌套深度;
max_input_vars=60;接受多少输入的变量,减轻dos攻击的可能性,如果超过指定数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断;
memory_limit=128M。最大单线程的独立内存使用量,也就是一个web请求,给予线程的最大内存使用量的定义。
还有一些错误信息说明,基本都是英文的字面意思,找不见临时目录啊大小超过限制啊之类的共8中错误信息,分别对应数字0-8但是没有数字5,在代码里进行判定输出,按照一一对应的,可以用switch……case,共7个case(0表示成功就不用写了)来表示输出错误信息。在代码中进行判定,如果没错误输出的话,就进行上传操作。
客户端的一些配置---但是在客户端的配置很多时候并不能真正起到限制作用,真正想限制都是要配置在服务端的:
通过表单隐藏域限制上传文件的最大值 <input type="hidden" name="MAX_FILE_SIZE" value="字节数" />
通过accept属性限制上传文件类型 <input type="file" name="myFile" accept="文件的MIME类型" />
在这个练手的过程中,我没有认识到一点,form表单最大上传限制(程序中的判定)和底层php的判定(php.ini中),因此如果我表单的最大上传限制为2M,而php.ini中的判定是10M,这样在我上传文件大小超过10M时肯定就直接提示代码错误,而当上传文件大小介于2M和10M之间时,程序可以执行,按照判定输出对应的错误信息。