最新消息:欢迎访问刘磊博客

PHP实现图片上传并生成缩略图

PHP编程 飞翔的mouse 264浏览

两种上传图片的方法都已经验证

首先index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="action.php" method="post" enctype="multipart/form-data">
    请选择您要上传的文件:<input type="file" name='myFile1' />
    <input type="submit" value="上传文件" />
</form>
</body>
</html>

action.php

<?php
header('content-type:text/html;charset=utf-8');
require_once 'upload.php';
$u=new upload('myFile1','500000','upload');
$a=$u->uploads();
$c=$u->Smallimg();
echo "<a href='$a'><img src='$c' /></a>";

upload.php

<?php


class upload
{
    protected $filename;//文件名
    protected $fileMine;//文件上传类型
    protected $filepath;//文件上传路径
    protected $filemax;//文件上传大小
    protected $fileExt;//文件上传格式
    protected $fileerror;//文件出错设置
    protected $fileflag;//文件检测
    protected $fileinfo; //FILES
    protected $ext; //文件扩展
    protected $path;

//文件上传
    public function __construct($filename = "N_File", $filemax = 5000000, $filepath = "Notices", $fileflag = true, $fileExt = array('gif', 'jpeg', 'pjpeg', 'jpg', 'png'), $fileMine = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/jpg', 'image/png'))
    {
        $this->filename = $filename;
        $this->fileinfo = $_FILES[$this->filename];
        $this->filemax = $filemax;
        $this->filepath = $filepath;
        $this->fileflag = $fileflag;
        $this->fileExt = $fileExt;
        $this->fileMine = $fileMine;
//var_dump($this->filename);
    }

//错误判断
    public function UpError()
    {
        if ($this->fileinfo['error'] > 0) {
            switch ($this->fileinfo['error']) {
                case 1:
                    $this->fileerror = "上传文件大小超过服务器允许上传的最大值,php.ini中设置upload_max_filesize选项限制的值 ";
                    break;
                case 2:
                    $this->fileerror = "上传文件大小超过HTML表单中隐藏域MAX_FILE_SIZE选项指定的值";
                    break;
                case 3:
                    $this->fileerror = "文件部分被上传";
                    break;
                case 4:
                    $this->fileerror = "没有选择上传文件";
                    break;
                case 5:
                    $this->fileerror = "未找到临时目录";
                    break;
                case 6:
                    $this->fileerror = "文件写入失败";
                    break;
                case 7:
                    $this->fileerror = "php文件上传扩展没有打开";
                    break;
                case 8:
                    $this->fileerror = "";
                    break;
            }
            return false;
        }
        return true;
    }

//检测文件类型
    public function UpMine()
    {
        if (!in_array($this->fileinfo['type'], $this->fileMine)) {
            $this->error = "文件上传类型不对";
            return false;
        }
        return true;
    }

//检测文件格式
    public function UpExt()
    {
        $this->ext = pathinfo($this->fileinfo['name'], PATHINFO_EXTENSION);
//var_dump($ext);
        if (!in_array($this->ext, $this->fileExt)) {
            $this->fileerror = "文件格式不对";
            return false;
        }
        return true;
    }

//检测文件路径
    public function UpPath()
    {
        $mtime = date('Y-m-d');
        $this->filepath = $this->filepath . '/' . $mtime;
        if (!file_exists($this->filepath)) {
            mkdir($this->filepath, 0777, true);
        }
    }

//检测文件大小
    public function UpSize()
    {
        $max = $this->fileinfo['size'];
        if ($max > $this->filemax) {
            $this->fileerror = "文件过大";
            return false;
        }
        return true;
    }

//检测文件是否HTTP
    public function UpPost()
    {
        if (!is_uploaded_file($this->fileinfo['tmp_name'])) {
            $this->fileerror = "恶意上偿还";
            return false;
        }
        return true;
    }

//文件名防止重复
    public function Upname()
    {
        return md5(uniqid(microtime(true), true));
    }

//图片缩略图
    public function Smallimg($x = 300, $y = 300)
    {
        $imgAtt = getimagesize($this->path);
//图像宽,高,类型
        $imgWidth = $imgAtt[0];
        $imgHeight = $imgAtt[1];
        $imgext = $imgAtt[2];
//等比列缩放
        if (($x / $imgWidth) > ($y / $imgHeight)) {
            $bl = $y / $imgHeight;
        } else {
            $bl = $x / $imgWidth;
        }
        $x = floor($imgWidth * $bl); //缩放后
        $y = floor($imgHeight * $bl);
        $images = imagecreatetruecolor($x, $y);
        switch ($imgext) {
            case 1:
                $imageout = imagecreatefromgif($this->path);
                break;
            case 2:
                $imageout = imagecreatefromjpeg($this->path);
                break;
            case 3:
                $imageout = imagecreatefrompng($this->path);
                break;
            default:
                $imageout = imagecreatefromjpeg($this->path);
        }
        imagecopyresized($images, $imageout, 0, 0, 0, 0, $x, $y, $imgWidth, $imgHeight);
        $names = $this->Upname();
        $this->path = $this->filepath . '/' . $names . '.' . $this->ext;
        imagejpeg($images, $this->path);
        return $this->path;
    }

//文件上传
    public function uploads()
    {
        if ($this->UpError() && $this->UpMine() && $this->UpExt() && $this->UpSize() && $this->UpPost()) {
            $this->UpPath();
            $names = $this->Upname();
            $this->path = $this->filepath . '/' . $names . '.' . $this->ext;
            if (move_uploaded_file($this->fileinfo['tmp_name'], $this->path)) {
                return $this->path;
            } else {
                $this->fileerror = "上传失败";
            }
        } else {
            exit("<b>" . $this->fileerror . "</b>");
        }
    }
}

转载请注明:刘磊博客 » PHP实现图片上传并生成缩略图