HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="../PHP_3/function_file_upload.php">
<input type="file" name="image">
<input type="submit" name="sub" value="提交">
</form>
</body>
</html>
PHP代码
<?php
header("content-type:text/html;charset=utf-8");
/*
* 实现文件上传
* @param1 array $file 需要上传的文件信息 一维5元素数组(name\tmp_name...)
* @param2 array $allow_type 允许上传的MIME类型
* @param3 string $path 存储路径
* @param4 string &$error 如果出现错误的原因
* @param5 array $allow_format=array() 允许上传的文件格式
* @param6 int $max_size=200000设置允许上传最大值
*/
function upload_single($file,$allow_type,$path,&$error,$allow_format=array(),$max_size=200000){
//判断文件是否有效
if (! is_array($file) || !isset($file['error'])){
$error='不是一个有效文件';
return false;
}
//判断文件路径是否有效
if (!is_dir($path)){
$error='文件不存在';
return false;
}
//判断文件上传的过程中是否存在过程:error
//判断文件上传过程中是否出错
switch ($file['error']){
case 1:
case 2:
$error='文件超出文件允许大小';
return false;
case 3:
$error='文件上传过程中存在问题,只上传了一部分';
return false;
case 4:
$error='用户没有选中要上传的文件!';
return false;
case 6:
case 7:
$error='文件保存失败';
return false;
}
//判断文件类型的处理:通过MIMR匹配即可
if (!in_array($file['type'],$allow_type)){
$error='当前文件类型不允许上传!';
return false;
}
//判断文件后缀名是否允许
//strchr()先查找从.开始到最后的字符串,然后ltrim()函数进行把点给替换掉。
$ext=ltrim(strrchr($file['name'],'.'),'.');
if (!empty($allow_format)&&!in_array($ext,$allow_format)){
$error='当前文件不允许上传';
return false;
}
//文件大小的处理
if ($file['size']> $max_size){
$error='当前上传文件超出最大文件限制大小'.$max_size.'zij';
return false;
}
//移动到指定目录
if (!is_uploaded_file($file['tmp_name'])){
//不是上传文件
$error='错误:不是上传文件!';
return false;
}
if (move_uploaded_file($file['tmp_name'],$path.$file['name'])){
return $file['name'];
}else{
$error="文件上传失败";
return false;
}
//构造文件名字:类型_年月日+随机字符串
$fullname = strstr($file['type'],'/',TRUE).date('YYYYmmdd');
for ($i=0;$i<4;$i++){
$fullname=chr(mt_rand(65,90));
}
//拼凑后缀
$fullname .='.'.$ext;
//移动到指定目录
if (!is_uploaded_file($file['tmp_name'])){
//不是上传文件
$error='错误!不是上传文件';
return false;
}
if(move_uploaded_file($file['file_name'],$path.'/'.$fullname)){
return $fullname;
}else{
$error='文件上传失败';
return false;
}
}
$file=$_FILES['image'];
$path='../phthoshop';
$allow_type=array('image/jpg','image/jpeg','image/gif','image/pjpeg');
$allow_format=array('jpg','gif','jpeg');
$max_size=8000000;
if ($filename=upload_single($file,$allow_type,$path,$error,$allow_format,$max_size)){
echo $filename;
}else{
echo $error;
}
?>