在很多网站中都需要上传文件,例如:图片、文档。下面我来分享一下我写的上传文件的方法。我是用类写的。
思路是:
首先获取上传的文件名称,对其进行重命名(防止文件重复)。
然后使用move_uploaded_file()函数将文件放置到的要上传的位置。
要注意html文件在上传文件是表单里要使用enctype=”multipart/form-data”这个属性。你需要先建立上传的文件夹(我的是upload文件夹)。
Upload.class.php 文件
<?php
/*
上传文件类
*/
class Upload{
public static $error; //记录错误信息
private static $allow = array('gif','png','jpg','jgeg'); //允许上传的文件类型,可以自己在添加
/*
* 上传文件方法,并返回文件的路径:路径是upload/,对文件必须进行重命名(以文件类型开始,后面随机(时间戳)+5位随机数
* @param1 array $_FILES,所有获得的提交的文件的数组
* @return array,所有文件上传保存的文件名
*/
public static function uploads($file){
//保存返回的路径
$path = array();
if(empty($file)){
self::$error = '没有上传文件';
return false;
}
foreach($file as $f){
//判断是否存在同名文件上传
$length = is_array($f['name']) ? count($f['name']) : 0;
if($length != 0){
//有同名文件上传(表单采用数组方式提交)
for($i = 0;$i< $length;$i++){
//对文件进行错误进行判断
if($f['error'] != 0){
self::checkError($f['error'][$i]);
return false;
}else{
//判断文件后缀
if(!self::checkExtension($f['name'][$i])){
//不合法的后缀名
self::$error = '文件类型不合法,允许的文件类型是:' . implode('|',self::$allow);
return false;
}
//文件没有问题
$per_path = self::getFullName($f['type'][$i],$f['name'][$i]);
move_uploaded_file($f['tmp_name'][$i],upload.'/'. $per_path);
$path[] = $per_path;
}
}
}else{
//用户上传的文件没有同名的
//对文件进行错误进行判断
if($f['error'] != 0){
self::checkError($f['error']);
return false;
}else{
//判断文件后缀
if(!self::checkExtension($f['name'])){
//不合法的后缀名
self::$error = '文件类型不合法,允许的文件类型是:' . implode('|',self::$allow);
return false;
}
//判断成功
$per_path = self::getFullName($f['type'],$f['name']);
move_uploaded_file($f['tmp_name'],upload.'/'. $per_path);
$path[] = $per_path;
}
}
}
//返回路径
return $path;
}
/*
* 获取文件的名字方法
* @param1 string $type,文件的MIME类型
* @param2 string $name,文件本身的全名
* @return string,完整的文件名字
*/
private static function getFullName($type,$name){
//获得图片类型
$type = substr($type,0,strpos($type,'/'));
//得到文件后缀名
$ext = substr($name,strrpos($name,'.'));
//拼凑全名
return $type . '_' . time() . rand(10000,99999) . $ext;
}
/*
* 根据错误代码进行错误处理方法
* @param1 int $error,错误代码
*/
private static function checkError($error){
//对文件进行错误进行判断
switch($error){
case 1:
self::$error = '文件超过服务器允许大小,最大允许' . ini_get('upload_max_filesize');
return false;
case 2:
self::$error = '文件超过浏览器允许大小';
return false;
case 3:
self::$error = '只有部分上传';
return false;
case 4:
self::$error = '用户没有选择上传文件';
return false;
case 6:
self::$error = '服务器找不到临时文件夹';
return false;
case 7:
self::$error = '文件写入失败';
return false;
}
}
/*
* 验证文件类型
* @param1 string $name,需要验证的文件的名称
* @return bool,成功返回true,失败返回false
*/
private static function checkExtension($name){
//获取后缀名
$ext = strrchr($name,'.');
$ext = substr($ext,1);
//判断后缀是否在允许的范围内
return in_array(strtolower($ext),self::$allow);
}
}
upload.html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Upload File</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="upload.php">
<input type="file" name="file" />
<input type="submit" value="提交">
</form>
</body>
</html>
使用文件上传类
upload.php 文件
require_once './Upload.class.php';
$res = Upload::uploads($_FILES);//接收的是图片的名字,用于保存到数据库中