PHP核心编程--文件上传(包含多文件上传)
一.单文件上传
图片上传界面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm'action="./uploadSave.php" method="post" enctype="multipart/form-data"> <input type="file" name="upfile" ></input> <input type="submit" name="submit" value="上传图片"></input> </form> </body> </html>
上传处理文件:
<?php header('content-type:text/html;charset=utf-8'); /** * 上传文件:可以通过输入的参数设置上传的文件类型 * 上传文件的大小限制,和上传的路径 * @param [type] $myupfile [表单文件域name的名称] * @param [type] $maxsize [允许上传的最大值] * @param [type] $arr_mime [允许的MIME类型] * @param [type] $path [上传的路径] * @author qinxiaoshou * 2017年9月6日 */ function uploadfile($myupfile, $maxsize, $arr_mine, $path) { //判断文件是否是通过 HTTP POST 上传的 // if (isset($_POST['submit'])) {} if(!is_uploaded_file($myupfile['tmp_name'])) { //如果有错误则直接停止脚本 echo "上传有错误,请重新上传"; } //判断是否有错误 if ($myupfile['error']) { echo "上传有错误,请重新上传"; } //判断文件大小 -- 不允许上传大于2M的文件 if ($myupfile['size'] > $maxsize) { echo "上传文件过大,请重新上传"; } //获取文件扩展名 $filename = $myupfile['name']; // //方法一 //strrpos 计算指定字符串在目标字符串中最后一次出现的 位置 //strrpos(haystack, needle); //strrpos(大海, 针); // $index = strrpos($filename,'.'); // $ext = substr($filename,$index); // echo "$ext"; //方法二 //strrchr - 查找指定字符在字符串的最后一次出现 $ext = strrchr($filename,'.'); // .jpg // echo $ext; //判断文件类型 //面向过程风格 $fs = finfo_open(FILEINFO_MIME_TYPE); $mine = finfo_file($fs,$myupfile['tmp_name']); //允许上传的文件类型 //$arr_mine = ['image/jpeg','image/png']; //in_array — 检查数组中是否存在某个值 //in_array(needle, haystack) if(!in_array($mine,$arr_mine)) { die('文件的类型不正确,请重新上传'); } //构建临时文件 $filename = $myupfile['tmp_name']; //构建目标文件 // $path = './upload'; $destination = $path.'/'.date('YmdHis').$ext; //将上传文件移动到新的位置返回布尔 //move_uploaded_file(filename,destination) //move_uploaded_file(临时文件,自定义目标文件) if(!move_uploaded_file($filename,$destination)) { die('上传失败!'); } }
调用封装方法界面
<?php header('content-type:text/html;charset=utf-8'); //将上传函数包含 require './config.php'; //判断是否是HTTP POST上传的 if (isset($_POST['submit'])) { $myupfile = $_FILES['upload']; $maxsize = 2*1024*1024; $arr_mine = ['image/jpeg','image/png']; $path = './upload'; uploadfile($myupfile,$maxsize,$arr_mine,$path); }else{ //如果直接访问此页面 echo "<script>alert('非法上传');location.href='index2.php'</script>"; }
二,多文件上传
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm' method='post' action='upload.php' enctype="multipart/form-data"> <table width="50%" border="2" align="center" rules="all" cellpadding="10"> <tr> <th colspan="2"> 上传文件:<br> <input type="file" name="upload[]"></input><br><br> <input type="file" name="upload[]"></input><br><br> <input type="file" name="upload[]"></input><br><br> <input type="submit" name="submit" value="上传"></input> </th> </tr> </table> </form> </body> </html>
多文件上传处理:
<?php header('content-type:text/html;charset=utf-8'); if (isset($_POST['submit'])) { /*echo "<pre>"; print_r($_FILES); echo "</pre>"; echo "<hr>";*/ $arr = $_FILES['upload']; echo "<pre>"; print_r($arr); echo "</pre>"; echo "<hr>"; foreach ($arr['tmp_name'] as $key => $value) { /*echo $key,$value,"<br>"; die;*/ //构建临时文件 //$filename = $_FILES['upload']['tmp_name']; //构建目标文件 if( $arr['size'][$key] >2*1024*1024){ die('no'); } $path = './upload'; //获取一个带前缀、基于当前时间微秒数的唯一ID。 $destination = $path.'/'.uniqid('itcast').'.jpg'; //将上传的文件移动到新位置,返回布尔 //move_uploaded_file(filename, destination) //move_uploaded_file(临时文件, 自定义目标文件) if(!move_uploaded_file($value,$destination)){ die('上传失败!'); } } } else { //如果直接访问此页面 echo "<script>alert('非法上传');location.href='index.php'</script>"; } ?>