织梦表单图片上传大小如何调整?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文
  1. 前端限制:在用户选择图片后,通过JavaScript进行初步校验,可以立即给用户反馈,体验更好。
  2. 后端限制:在图片上传到服务器后,通过PHP进行最终的、安全的校验。这是最重要的一步,因为前端限制可以被用户绕过。

下面我将分别介绍如何在这两个层面进行设置。

织梦表单 上传图片大小
(图片来源网络,侵删)

核心配置文件:php.ini

无论前端如何设置,最终决定文件上传大小的是服务器上的 php.ini 配置文件,在修改任何代码之前,请先确保你的服务器配置允许上传你期望大小的文件。

你需要检查并修改以下几个关键参数:

; 允许上传文件的最大大小,单位是字节,8M 8 * 1024 * 1024 = 8388608 字节
upload_max_filesize = 8M
; POST数据最大大小,它应该至少和 upload_max_filesize 一样大
post_max_size = 10M
; 内存限制,脚本运行时最大消耗的内存
memory_limit = 128M

修改后:保存 php.ini 文件,然后需要重启你的Web服务器(如 Apache 或 Nginx)才能生效。


修改织梦核心文件(后端限制,最关键)

这是最标准、最安全的方法,它会限制所有通过织梦后台“附件管理”功能上传的图片大小。

织梦表单 上传图片大小
(图片来源网络,侵删)

操作步骤:

  1. 找到核心文件 打开织梦的后台目录,找到并编辑以下文件: /dede/media_add.php

  2. 定位并修改代码 在这个文件中,搜索 if ($ftype=='image') 或者类似的图片处理逻辑块,你会找到一段处理图片上传的代码,其中通常会包含 is_uploaded_file()move_uploaded_file() 函数。

    在这些函数执行之前,添加文件大小的判断逻辑。

    你可能会找到类似这样的代码结构:

    // ... 其他代码 ...
    if ($ftype=='image')
    {
        $fs = $file['size']; // 获取文件大小
        // 这里是处理图片的代码
        // ...
    }

    你需要在这里加入一个 if 判断,如果文件大小超过限制,就终止程序并提示错误。

    修改后的代码示例(假设限制为 2MB):

    // ... 其他代码 ...
    if ($ftype=='image')
    {
        $fs = $file['size']; // 获取文件大小,单位是字节
        $max_size = 2 * 1024 * 1024; // 设置最大上传大小为 2MB (2 * 1024 * 1024 bytes)
        // 检查文件大小是否超过限制
        if ($fs > $max_size) {
            ShowMsg("您上传的图片大小超过了系统2MB的限制!", '-1');
            exit();
        }
        // 如果大小符合,则继续执行原有的图片处理代码
        $filename = $file['tmp_name'];
        $imginfos = GetImageSize($filename, $info);
        // ... 后续代码 ...
    }
    // ... 其他代码 ...

    代码解释:

    • $max_size = 2 * 1024 * 1024;:定义了最大允许的字节数,你可以根据需要修改这个数值。
    • if ($fs > $max_size):比较上传文件的实际大小和设定的最大值。
    • ShowMsg("您上传的图片大小超过了系统2MB的限制!", '-1');:如果超过限制,调用织梦自带的提示函数,显示错误信息,并返回上一页。
    • exit();:立即终止脚本执行,防止后续代码运行。
  3. 保存并测试 保存修改后的 media_add.php 文件,当你再去后台“附件管理”中尝试上传一张大于2MB的图片时,就会看到你自定义的错误提示,并且上传会失败。


针对自定义表单(后端限制)

如果你使用的是织梦的“自定义表单”功能来创建一个带图片上传的字段,那么你需要修改处理该表单提交的PHP文件。

  1. 找到处理文件 这个文件通常位于你的网站根目录下,文件名是你在表单提交时设置的 action 值,如果你的表单提交地址是 /plus/diy.php,那么你就需要修改 /plus/diy.php

  2. 定位并修改代码 打开 diy.php 文件,搜索处理上传文件的代码,通常在文件末尾,$diy->save($addvar); 这行代码之前。

    你需要找到类似 $file$upfile 这样的变量,它包含了上传文件的信息。

    修改后的代码示例(假设限制为 1MB):

    // ... 在 $diy->save($addvar); 之前添加以下代码 ...
    // 检查是否有文件上传
    if (!empty($_FILES['imgfile']['name'])) { // 'imgfile' 是你表单中文件上传框的 name 属性
        $file_size = $_FILES['imgfile']['size'];
        $max_size = 1 * 1024 * 1024; // 设置最大上传大小为 1MB
        if ($file_size > $max_size) {
            showMsg('您上传的图片大小超过了系统1MB的限制,请返回修改!', -1);
            exit();
        }
    }
    // ... 原有的保存代码 ...
    $diy->save($addvar);

    代码解释:

    • $_FILES['imgfile']['name']'imgfile' 必须 和你自定义表单中“文件上传”类型的字段的 name 属性完全一致。
    • $_FILES['imgfile']['size']:获取上传文件的大小。
    • 后面的逻辑和方法一完全相同。

前端JavaScript限制(优化用户体验)

前端限制可以提供即时反馈,让用户不用等到图片上传完成才知道大小超限,但这只是辅助手段,不能替代后端限制

  1. 找到并编辑模板文件 打开你使用了自定义表单的模板文件(通常是 .htm 文件)。

  2. 添加JavaScript代码 在表单的 <form> 标签附近,或者在 <head> 标签内,添加如下JavaScript代码。

    <script>
    function checkFileSize() {
        // 获取文件上传框
        var fileInput = document.getElementById('imgfile'); // 'imgfile' 是文件上传框的 id 属性
        var fileSize = fileInput.files[0]; // 获取第一个文件对象
        // 设置最大大小,单位是字节 (2MB)
        var maxSize = 2 * 1024 * 1024;
        // 检查是否选择了文件
        if (fileSize) {
            // 检查文件大小
            if (fileSize.size > maxSize) {
                alert('错误:您选择的图片大小超过了 2MB 的限制!');
                // 清空文件选择框,阻止表单提交
                fileInput.value = '';
                return false; // 阻止表单提交
            }
        }
        return true; // 允许表单提交
    }
    </script>
  3. 修改表单标签 在你的 <form> 标签中,添加 onsubmit 事件来调用这个检查函数。

    <form action="/plus/diy.php" enctype="multipart/form-data" method="post" onsubmit="return checkFileSize();">
        <!-- 你的表单内容 -->
        <input type="file" name="imgfile" id="imgfile" />
        <button type="submit">提交</button>
    </form>

    代码解释:

    • document.getElementById('imgfile'):通过 id 获取文件上传元素,确保 id 和JS中的 id 一致。
    • fileInput.files[0].size:这是获取所选文件大小的标准JS方法。
    • onsubmit="return checkFileSize();":当用户点击提交按钮时,会先执行 checkFileSize() 函数,如果函数返回 false,表单就不会被提交。

总结与最佳实践

  1. 必做项:首先检查并修改服务器的 php.ini 文件,设置合理的 upload_max_filesizepost_max_size
  2. 核心安全项:根据你的上传场景(后台附件或自定义表单),修改对应的PHP处理文件(media_add.phpdiy.php),加入后端大小校验逻辑,这是防止用户绕过前端检查的最后一道防线。
  3. 优化体验项:在模板文件中添加前端JavaScript校验,为用户提供即时的反馈,提升用户体验。

按照以上步骤操作,你就可以全面、安全地控制织梦CMS中表单上传图片的大小了。

-- 展开阅读全文 --
头像
织梦模板如何添加搜索功能?
« 上一篇 01-22
dede分页检索不到,原因是什么?
下一篇 » 01-22

相关文章

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

目录[+]