- 前端限制:在用户选择图片后,通过JavaScript进行初步校验,可以立即给用户反馈,体验更好。
- 后端限制:在图片上传到服务器后,通过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)才能生效。
修改织梦核心文件(后端限制,最关键)
这是最标准、最安全的方法,它会限制所有通过织梦后台“附件管理”功能上传的图片大小。

操作步骤:
-
找到核心文件 打开织梦的后台目录,找到并编辑以下文件:
/dede/media_add.php -
定位并修改代码 在这个文件中,搜索
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();:立即终止脚本执行,防止后续代码运行。
-
保存并测试 保存修改后的
media_add.php文件,当你再去后台“附件管理”中尝试上传一张大于2MB的图片时,就会看到你自定义的错误提示,并且上传会失败。
针对自定义表单(后端限制)
如果你使用的是织梦的“自定义表单”功能来创建一个带图片上传的字段,那么你需要修改处理该表单提交的PHP文件。
-
找到处理文件 这个文件通常位于你的网站根目录下,文件名是你在表单提交时设置的
action值,如果你的表单提交地址是/plus/diy.php,那么你就需要修改/plus/diy.php。 -
定位并修改代码 打开
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限制(优化用户体验)
前端限制可以提供即时反馈,让用户不用等到图片上传完成才知道大小超限,但这只是辅助手段,不能替代后端限制。
-
找到并编辑模板文件 打开你使用了自定义表单的模板文件(通常是
.htm文件)。 -
添加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> -
修改表单标签 在你的
<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,表单就不会被提交。
总结与最佳实践
- 必做项:首先检查并修改服务器的
php.ini文件,设置合理的upload_max_filesize和post_max_size。 - 核心安全项:根据你的上传场景(后台附件或自定义表单),修改对应的PHP处理文件(
media_add.php或diy.php),加入后端大小校验逻辑,这是防止用户绕过前端检查的最后一道防线。 - 优化体验项:在模板文件中添加前端JavaScript校验,为用户提供即时的反馈,提升用户体验。
按照以上步骤操作,你就可以全面、安全地控制织梦CMS中表单上传图片的大小了。
