php文件上传
一、php文件上传需要确认的配置选项
在php.ini文件中看下 ---> file_uploads = On upload功能是否打开
---> upload_tmp_dir = "c:/wamp/tmp" 设置上传缓存的文件夹
---> post_max_size = 8M 默认post提交文件大小的最大值
---> upload_max_filesize = 2M 默认上传文件的最大大小
要先确认post可以提交的最大值 大于 默认上传文件大小的最大值
二、写上传表单需要注意的事项
1.表单的method必须是 HTTP post
2.表单中的上传路径选项要使用 type="file"
3.在表单的 form 中要使用 encype="multipart/from-data" 用来指定上传数据的编码方式
4.可以在表单上设置上传文件的最大大小 <input type="hidden" name="MAX_FILE_SIZE" value="100000"> 是个友好的提示(建议使用)
三、php脚本处理接收到的文件
$_POST 只可以接收文本类的数据
$_FILES 专门来接收 type="file" 的文件
在对上传到服务器缓存中的文件应该做些检查处理,避免发生意外
1.检查上传文件的错误代码(有可能发生错误)
1 if ( $_FILES[‘file_name‘][‘error‘] > 0 ){ 2 3 switch ( $_FILES[‘file_name‘][‘error‘] ){ 4 5 case 1: 6 7 echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值"; 8 9 break; 10 11 case 2: 12 13 echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值"; 14 15 break; 16 17 case 3: 18 19 echo "文件只有部分被上传"; 20 21 break; 22 23 case 4: 24 25 echo "没有文件被上传"; 26 27 break; 28 29 30 31 default: 32 33 echo "未知错误"; 34 35 } 36 37 exit; //若 》0 则跳出 if 38 39 }else{ 40 41 echo "文件正常"; 42 43 }
2.检查上传文件的大小并做出处理
1 $max_size = 100000; //100K 2 3 if ( $_FILES[‘file_name‘][‘size‘] > $max_size ){ 4 5 echo "文件大小大于设定的大小"; 6 7 }else{ 8 9 echo "文件大小正常"; 10 11 }
3.检查文件类型
1 $allowtype = array( ‘gif‘ , ‘png‘ , ‘jpg‘ , ‘jpeg‘ ); //设置内容支持的文件的后缀名 2 3 $arr = explode( ‘.‘ , $_FILES[‘file_name‘][‘name‘] ); 4 5 $hz = $arr[count($arr) -1]; //防止文件名中有 . 6 7 if ( !in_array( $hz , $allowtype) ) { 8 9 echo "这是不允许的类型"; 10 11 exit; 12 13 }
4.把文件改名后转移到指定文件夹
1 $filepath = ‘uploads/‘ ; 2 3 $rename = date(‘Y‘).date(‘n‘).date(‘d‘).date(‘H‘).date(‘i‘).date(‘s‘).rand(100,999).‘.‘.$hz; //改个新名 4 5 if ( is_uploaded_file($_FILES[‘file_name‘][‘tmp_name‘])){ 6 7 if ( move_uploaded_file( $_FILES[‘file_name‘][‘tmp_name‘] , $filepath, $rename)){ 8 9 echo "上传成功!"; 10 11 }else{ 12 13 echo "上传失败!"; 14 15 } 16 17 }else{ 18 19 echo "不是一个上传的文件"; 20 21 }
总结一下就是:
在使用php上传功能时,需要检查php.ini中的配置项,避免出现大小不符的问题。
在服务器接收到文件后,应当对文件进行错误,类型等的检查,然后在脚本结束前把文件转移到其他文件夹中。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。