注意点
使用input选择多文件
使用move_uploaded_file(),上传文件到服务器
运行结果
代码
<?php
/****************************
*** 功能:上传文件到服务器
****************************/
session_start();
/*
* 文件上传函数封装
* @param1 array $file,要上传的文件信息,包含5个元素
* @param2 string $path,存储位置
* @param3 $string error,错误信息
* @param4 array $type=array(),MIME类型限定
* @param5 int $size=2000000,默认2M
* @return mixed, 成功返回文件名,失败返回false
*/
function fileUpload($file,$path,&$error,$type=array(),$size=2000000 ){
//判断本身文件是否有效
if(!isset($file['error'])){
$error='文件无效';
return false;
}
//有效路径的判断
if(!is_dir($path)){
$error='存储路径无效';
return false;
}
//判断文件本身上传是否成功
switch ($file['error']){
case 1:
$error='上传文件大小超出配置文件规定值';
return false;
case 2:
$error='文件超过服务器允许大小';
return false;
case 3:
$error='文件只有部分上传';
return false;
case 4:
$error='用户没有选择文件上传';
return false;
case 6:
case 7:
$error='服务器操作失败';
return false;
}
//判断类型是否符合
if (!empty($type) && !in_array($file['type'],$type)){
$error='当前上传的文件类型不符合';
return false;
}
//大小判断
if ($file['size']>$size){
$error='文件大小超过当前允许范围.当前允许大小是:'.string($size/1000000).'M';
return false;
}
//转存,移动文件
$newfilename=getNewName($file['name']);
if(@move_uploaded_file($file['tmp_name'],$path.''.$newfilename)){
return $newfilename;
}
else{
$error='文件上传失败';
return false;
}
}
//随机产生一个文件名
function getNewName($filename,$rand=6){
$newname=date('YmdHis');//时间日期部分
//随机部分
$old=array_merge(range('a','z'),range('A','Z'));
shuffle($old);
for ($i=0;$i<$rand;$i++){
$newname.=$old[$i];
}
return $newname.strstr($filename,'.');//组织有效文件名
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>通过move_upload_file()函数上传文件到服务器</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!--单文件上传-->
<table width="830" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3">
<hr>
<span>单文件上传</span>
</td>
</tr>
<form action="" method="post" enctype="multipart/form-data">
<tr>
<td width="193" rowspan="4">
<!--此语句可以设置上传文件大小超出表单中约定值-->
<input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
</td>
<td width="423" height="50">选择上传文件:
<!--此语句可以显示一个按钮用来打开本地电脑---->
<input type="file" name="up_picture"/>
</td>
<td width="214" rowspan="4">
</td>
</tr>
<tr>
<td height="30" align="center">
<span class="STYLE1">上传文件</span>
</td>
</tr>
<tr>
<td height="50" align="center">
<button type="submit">提交</button>
<button type="reset">重置</button>
</td>
</tr>
</form>
<tr>
<td height="70">
<?php
if(!empty($_FILES["up_picture"]["name"])){//判断上传内容是否为空
if($_FILES["up_picture"]["error"] > 0){//判断文件是否可以上传到服务器
echo "上传错误!";
switch($_FILES["up_picture"]["error"]){//如果上传错误 判断出错原因
case 1:
echo "上传文件大小超出配置文件规定值";
break;
case 2:
echo "上传文件大小超出表单中约定值";
break;
case 3:
echo "上传文件不全";
break;
case 4:
echo "没有上传文件";
break;
}
}else{
if(!is_dir("./upfile/")){//判断指定目录是否存在
mkdir("./upfile/");//创建一个目录
}
$path = './upfile/'.time().strstr($_FILES["up_picture"]["name"],'.');//定义文件名称和存储位置
if(is_uploaded_file($_FILES['up_picture']['tmp_name'])){//是否是HTTP POST上传
if(move_uploaded_file($_FILES['up_picture']['tmp_name'],$path)){//执行上传
echo "<pre>";
print_r($_FILES);die;
echo "上传文件".$_FILES['up_picture']['name']."成功.文件大小为:".$_FILES['up_picture']['size'];
}else{
echo "上传失败";
}
}else{
echo "上传文件".$_FILES['up_picture']['name']."不合法";
}
}
}
?>
</td>
</tr>
<tr>
<td colspan="3">
<hr>
</td>
</tr>
</table>
<!--多文件上传-->
<table width="830" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3">
<hr>
<span>多文件上传</span>
</td>
</tr>
<form action="" method="post" enctype="multipart/form-data">
<tr>
<td width="193" rowspan="4">
<!--此语句可以设置上传文件大小超出表单中约定值-->
<input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
</td>
<td width="423" height="50">选择上传文件:
<!--此语句可以显示一个按钮用来打开本地电脑---->
<input type="file" name="file[]" multiple="multiple"/>
</td>
<td width="214" rowspan="4">
</td>
</tr>
<tr>
<td height="30" align="center">
<span class="STYLE1">上传文件</span>
</td>
</tr>
<tr>
<td height="50" align="center">
<button type="submit">提交</button>
<button type="reset">重置</button>
</td>
</tr>
</form>
<tr>
<td height="70">
<?php
$arrFile =$_FILES['file'];
$sPath = './upfile/';//定义文件存储目录
//$sPath = './upload/upfile/';//定义文件存储目录
$sError = null;//定义错误提示
$arrType = array();//定义可上传文件类型范围
//$arrType = array('image/jpeg','image/jpg','image/png','image/gif');
if(!is_dir($sPath)){//判断指定目录是否存在
mkdir($sPath);//创建一个目录
}
//循环上传
for ($i=0,$len=count($arrFile['name']);$i<$len;$i++){
$arrFileOne=array(
'name'=>$arrFile['name'][$i],
'type'=>$arrFile['type'][$i],
'tmp_name'=>$arrFile['tmp_name'][$i],
'error'=>$arrFile['error'][$i],
'size'=>$arrFile['size'][$i]
);
//调用文件上传函数
$bRes=fileUpload($arrFileOne,$sPath,$sError,$arrType);
if ($bRes){
echo '文件上传成功,对应的文件名是:'.$bRes.'<br>';
}
else{
echo $sError;
}
}
?>
</td>
</tr>
<tr>
<td colspan="3">
<hr>
</td>
</tr>
</table>
</body>
</html>