之前我记得写过一个图片上传的文章,但是图片和文件区别也是很大的,文件必须保证上传的类型必须符合要求,否则将会导致网站异常,攻击等,比如你没有判断别人上传的文件类型,那别人直接上传一个php的木马,直接放一个webshell在你的网站,遍历目录,获取你的网站源代码等等。
所以对于文件上传的要求是很高的。接下来我讲述一个简单的文件上传方法。
我在这里允许上传的后缀为 txt、zip、rar这三种文件类型。
最大上传大小为2024kb(2M),php.ini配置文件中默认就是2m
做文件上传一般都是判断文件是否存在,文件保存目录是否存在,文件上传目录是否有权限,文件是否超过最大大小限制,是否是通过https方式上传,文件上传后缀(类型)是否被允许这几种常规上传规则。
首先html我们使用框架上传,这样更好一点,php是没法异步上传的,框架上传也是一种不错的方法。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>【七空幻音】PHP简单文件上传</title> </head> <body> <form action="file.php" method="post" enctype="multipart/form-data" target="upfile_iframe"> <input type="submit" name="submit" value="上传"> </form> <iframe src="file.php" width="0" height="0" style="display:none;" name="upfile_iframe"></iframe> </body> </html>
php上传的要求是post方法,enctype="multipart/form-data" 属性。
为了方便上传再加上一个框架,让上传图片在这个框架上传,所以给表单加上一个target指向这个框架就行了。框架再隐藏即可。
上传处理文件
<?php //文件上传 txt rar zip header("Content-type: text/html; charset=utf-8"); //允许的文件类型 $allowSuffix = array('txt','rar','zip'); //最大上传大小(KB) $sizeMax = 2024; if(isset($_FILES['upfile'])){ $file = $_FILES['upfile']; $size = $file['size']; $name = $file['name']; $error = $file['error']; //判断文件是否上传 if(!$name){ alert("请选择文件"); } //判断这个目录是否存在 if(!is_dir("upload")){ alert("文件保存目录不存在"); } //判断是否有这个目录写的权限 if (@is_writable("upload") === false) { alert("上传目录没有写权限"); } if($size/1024>$sizeMax){ alert("文件大小超过最大限制"); } if(!is_uploaded_file($_FILES['upfile']['tmp_name'])) { alert("上传失败"); } //检查是否运行这个后缀的上传 if(!in_array(get_suffix($name),$allowSuffix)){ alert("这个类型不允许上传"); } $filePath = "upload/".file_rename($name); if(move_uploaded_file($file['tmp_name'],$filePath)){ alert("上传成功:文件路径:".$filePath); }else{ alert("移动文件失败"); } } //提示用户并终止程序 function alert($msg){ exit("<script>alert('".$msg."')</script>"); } //获取文件的后缀 function get_suffix($fileName){ $file_end = explode('.',$fileName); return $file_end[count($file_end)-1]; } //获取文件名称(不含后缀) function get_file_name($fileName){ $file_end = explode('.',$fileName); $name = ''; for($i=0;$i<count($file_end);$i++){ if($i!=count($file_end)-1){ $name.=$file_end[$i]; } } return $name; } //生成新的名称(存在则随机生一个数字,如果还存在则递归生成) function file_rename($name){ $fileName = get_file_name($name).'-'.date("YmdHis",time()).'.'.get_suffix($name); if(file_exists("upload/".$fileName)){ $tmpName = get_file_name($name).'-'.date("YmdHis",time()).'-'.rand(0,9).'.'.get_suffix($name); if(file_exists("upload/".$tmpName)){ file_rename($name); }else{ return $tmpName; } }else{ return $fileName; } } ?>Demo下载地址:
0条评论登录后可见