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

967次阅读
没有评论

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

首先 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>");
        }
    }
}

正文完
 0
飞翔的mouse
版权声明:本站原创文章,由 飞翔的mouse 于2019-08-07发表,共计3683字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。