PHP 文件上传 函数

PHP代码:

/**
 * 文件上传函数
 * @param  array|string  $path    array('path'=>'uploads/','allow'=>array(''image/jpeg',')...)|'uploads/'
 * @param  array   $allow   允许上传的类型
 * @param  integer $maxsize 允许上传文件的大小
 * @param  boolean $type    设置二级目录的格式,例如:2017-10-25|20171025
 * @return string           返回信息
 */
function upload($path = 'uploads/', $allow=array(), $maxsize=1048576, $type=false)
{
//记录错误信息
$error = '';
if( is_array($path) )
{
extract($path);
if( !is_string($path) ) $path = 'uploads/';
}


if( !$allow )
{
$allow = array('image/jpeg', 'image/png', 'image/gif');
}
$key = key($_FILES);
$file = $_FILES[$key];
//先判断系统错误
switch($file['error'])
{
case 1:
$error = '上传失败!超出了文件限制的大小!';
break;
case 2:
$error = '上传失败!超出了浏览器规定的文件大小!';
break;
case 3:
$error = '上传失败,文件上传不完整!';
break;
case 4:
$error = '上传失败,请选择要上传的文件!';
break;
case 6:
case 7:
$error = '对不起,服务器繁忙,请稍后再试!';
break;
}


//判断逻辑错误
if( $file['size'] > $maxsize )
{
$error = '上传失败,超出了文件限制的大小!';
}
//非法文件类型
if( !in_array( $file['type'], $allow ) )
{
$error = '上传文件的类型不正确,允许上传的类型有:' . implode(',', $allow);
}
//返回错误信息
if( $error ) return $error;
//拼接新名称
$newName = dateName($path, $type);
//图片新名称,并返回的名称
$newName .= date('YmdHis') . uniqid() . strrchr($file['name'], '.');
//拼接加存放目录
$target = $path . $newName;
//移动临时文件到指定的目录下
$info = move_uploaded_file($file['tmp_name'], $target);
//返回文件目录与文件名称
return $info ? $newName : '上传文件失败!';
}


/**
 * 自动创建目录
 * @param  string  $path 存放文件目录
 * @param  boolean $type 设置二级目录的格式,例如:2017-10-25|20171025
 * @return string        返回目录名称
 */
function dateName($path = './', $type = false)
{
$type = $type ? date($type) : date('Y-m-d');
if( !is_dir( $path ) )
@mkdir($path);


if( !is_dir($path . $type) )
@mkdir($path . $type);
return $type . '/';
}


$file = upload(array('path' => 'uploads/', 'allow'=>array('image/jpeg', 'image/png', 'image/gif')));
var_dump($file);


html代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" value="" />
    <input type="submit" value="上传" />
    </form>
    </body>
</html>

  • 635
  • A+
发布时间:2017-10-25 16:28:47