织梦如何限制文章图片上传大小?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 织梦建站 正文
  1. 前端限制(推荐):在用户上传图片时,通过JavaScript在前端进行检测和压缩,只允许上传符合尺寸的图片,这种方法用户体验最好,因为用户能立即得到反馈。
  2. 后端限制:在图片上传到服务器后,通过PHP代码进行检测和强制处理,这种方法更“硬核”,但可能影响用户体验,因为用户上传后才发现图片不合格。

下面我将详细介绍这两种方法的实现步骤。

织梦限制文章图片大小
(图片来源网络,侵删)

前端限制(用户体验最佳)

这种方法的核心是在用户点击“上传”按钮之前,就利用浏览器的能力检查图片的原始尺寸,如果尺寸不符合要求,就阻止上传并提示用户。

修改文件: /include/dialog/select_images_post.php (这是选择图片并插入文章的弹窗处理文件)

操作步骤:

  1. 备份原文件:在进行任何修改前,请务必备份原始的 select_images_post.php 文件。

    织梦限制文章图片大小
    (图片来源网络,侵删)
  2. 编辑文件:打开 select_images_post.php 文件,找到处理上传逻辑的部分,通常是在一个类似 if ($dopost == 'upload') 的判断语句内。

  3. 添加PHP检测代码:在文件上传成功后、保存数据库之前,添加以下PHP代码来检测图片尺寸。

    // 在上传成功后,添加如下代码
    // 假设你已经获得了上传后的图片路径 $filename
    // 1. 设置允许的最大尺寸(单位:像素)
    $max_width = 800;
    $max_height = 600;
    // 2. 获取图片尺寸
    $image_info = getimagesize($cfg_basedir . $filename);
    if ($image_info) {
        $img_width = $image_info[0];
        $img_height = $image_info[1];
        // 3. 判断尺寸是否超限
        if ($img_width > $max_width || $img_height > $max_height) {
            // 如果超限,删除已上传的文件
            @unlink($cfg_basedir . $filename);
            // 输出错误提示并终止脚本
            showMsg("图片尺寸过大!请上传宽度不超过 {$max_width}px,高度不超过 {$max_height}px 的图片。", "javascript:;");
            exit();
        }
    }
  4. 整合到代码中:将上述代码块插入到 select_images_post.php 文件中,通常在 //成功上传文件 的注释下方,但在 //更新数据库 之前。

    // ... 原有代码 ...
    if ($dopost=='upload')
    {
        // ... 原有上传逻辑 ...
        // 成功上传文件
        $fileurl = $activepath.'/'.$filename;
        $upfile = $cfg_basedir.$activepath.'/'.$filename;
        // 【在这里添加上面的PHP检测代码块】
        // 1. 设置允许的最大尺寸(单位:像素)
        $max_width = 800;
        $max_height = 600;
        // 2. 获取图片尺寸
        $image_info = getimagesize($upfile); // 注意这里使用 $upfile
        if ($image_info) {
            $img_width = $image_info[0];
            $img_height = $image_info[1];
            // 3. 判断尺寸是否超限
            if ($img_width > $max_width || $img_height > $max_height) {
                // 如果超限,删除已上传的文件
                @unlink($upfile);
                // 输出错误提示并终止脚本
                showMsg("图片尺寸过大!请上传宽度不超过 {$max_width}px,高度不超过 {$max_height}px 的图片。", "javascript:;");
                exit();
            }
        }
        // 【检测代码块结束】
        // 更新数据库
        $inquery = "INSERT INTO `#@__uploads`(arcid,title,url,mediatype,width,height)
        VALUES ('$aid','$filename','$fileurl','1','$imgwidth','$imgheight')";
        // ... 后续代码 ...
    }
    // ... 原有代码 ...

优点:

织梦限制文章图片大小
(图片来源网络,侵删)
  • 严格把关,任何不符合尺寸的图片都无法被系统接受。
  • 从根本上杜绝了大尺寸图片进入网站数据库。

缺点:

  • 用户体验稍差,用户需要重新选择图片并上传。

后端自动压缩与调整(技术流推荐)

这种方法更为智能,它允许用户上传任意尺寸的图片,但在保存到服务器前,系统会自动将图片压缩裁剪/缩放到你设定的尺寸,这样既保证了图片质量,又控制了文件大小和显示尺寸。

修改文件: /include/helpers/upload.helper.php (这是织梦核心的上传类文件)

操作步骤:

  1. 备份原文件:备份 upload.helper.php

  2. 编辑文件:打开 upload.helper.php,找到 MoveFile() 方法(或类似处理文件移动和重命名的核心方法)。

  3. 添加图片处理逻辑:在文件移动成功后,添加使用GD库进行图片处理的代码。

    // 在 MoveFile 方法中,文件移动成功后添加如下代码
    // 检查是否是图片文件
    if ($this->filetype == 'jpg' || $this->filetype == 'png' || $this->filetype == 'gif' || $this->filetype == 'jpeg') {
        // 设置目标尺寸
        $target_width = 800;
        $target_height = 600;
        // 原始文件路径
        $source_path = $this->filepath;
        // 获取原始图片信息
        list($src_width, $src_height, $src_type) = getimagesize($source_path);
        // 创建目标图片资源
        switch ($src_type) {
            case IMAGETYPE_JPEG:
                $src_img = imagecreatefromjpeg($source_path);
                break;
            case IMAGETYPE_PNG:
                $src_img = imagecreatefrompng($source_path);
                break;
            case IMAGETYPE_GIF:
                $src_img = imagecreatefromgif($source_path);
                break;
            default:
                // 不支持的图片类型,跳过处理
                break;
        }
        // 如果成功创建了图片资源
        if (isset($src_img)) {
            // 计算缩放比例
            $ratio = min($target_width / $src_width, $target_height / $src_height);
            // 计算新尺寸
            $new_width = (int)($src_width * $ratio);
            $new_height = (int)($src_height * $ratio);
            // 创建目标画布
            $dst_img = imagecreatetruecolor($new_width, $new_height);
            // 处理PNG透明背景
            if ($src_type == IMAGETYPE_PNG) {
                imagealphablending($dst_img, false);
                imagesavealpha($dst_img, true);
                $transparent = imagecolorallocatealpha($dst_img, 255, 255, 255, 127);
                imagefilledrectangle($dst_img, 0, 0, $new_width, $new_height, $transparent);
            }
            // 调整图片大小(保持比例)
            imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $src_width, $src_height);
            // 覆盖保存回原文件
            switch ($src_type) {
                case IMAGETYPE_JPEG:
                    imagejpeg($dst_img, $source_path, 85); // 85是JPEG质量
                    break;
                case IMAGETYPE_PNG:
                    imagepng($dst_img, $source_path, 9); // 9是PNG压缩级别
                    break;
                case IMAGETYPE_GIF:
                    imagegif($dst_img, $source_path);
                    break;
            }
            // 释放内存
            imagedestroy($src_img);
            imagedestroy($dst_img);
            // 可选:更新上传类中的文件尺寸信息,以便存入数据库
            $this->imgwidth = $new_width;
            $this->imgheight = $new_height;
        }
    }

优点:

  • 用户体验极佳:用户无需关心图片尺寸,系统自动处理。
  • 性能优化:自动压缩减少了图片文件体积,加快了网站加载速度。
  • 布局稳定:所有图片尺寸统一,保证了页面布局的美观和稳定。

缺点:

  • 需要服务器开启GD库支持。
  • 如果处理不当,可能会轻微损失图片质量(但通常在可接受范围内)。

总结与建议

特性 前端限制 后端自动处理
用户体验 较差,需要用户重新上传 极佳,完全自动化
技术门槛 较低,只需添加PHP判断 较高,需要熟悉GD库图像处理
效果 严格禁止,不合格图片无法入库 智能处理,所有图片都符合规范
服务器负载 减少无效文件上传 需要额外CPU资源进行图像处理
推荐场景 对图片尺寸有硬性要求,且不希望用户上传大图 绝大多数网站,追求最佳性能和用户体验

强烈推荐使用方法二(后端自动处理),虽然设置稍微复杂一点,但它一劳永逸地解决了图片尺寸和大小的问题,是现代网站内容管理的最佳实践,你只需要设置一次,之后所有上传的图片都会被自动优化。

最后提醒:

  • 在修改核心文件前,务必备份
  • 修改后,请自己上传不同尺寸和大小的图片进行测试,确保功能符合预期。
-- 展开阅读全文 --
头像
织梦更新首页后为何没变化?
« 上一篇 今天
河南织梦科技有限公司
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]