一.单文件上传
图片上传界面:
<!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>
上传处理文件:
<?phpheader(‘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(‘上传失败!‘); ???????} ???}
二,多文件上传
<!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>";}?>
PHP核心编程--文件上传(包含多文件上传)
原文地址:http://www.cnblogs.com/mrszhou/p/7487317.html