一、为什么需要解除函数禁用
为了安全,PHP环境(尤其宝塔、LNMP一键包)默认禁用了一批"危险函数"。织梦CMS的部分功能依赖其中一些函数,若被禁用会导致安装失败、采集异常、生成静态失败等问题。安装前需要根据织梦实际需求,精准解除个别函数的禁用。
二、织梦依赖的函数清单
| 函数 | 用途 | 是否必须 |
|---|---|---|
| putenv | 设置环境变量(中文处理) | 必须 |
| exec | 执行外部命令(部分采集) | 可选 |
| shell_exec | 通过shell执行命令 | 可选 |
| system | 执行外部程序并显示输出 | 可选 |
| passthru | 执行外部命令并原始输出 | 可选 |
| chroot | 改变根目录 | 无需 |
| proc_open | 执行命令并打开管道 | 可选 |
必解除:putenv
织梦核心依赖,用于设置字符集环境变量,影响中文显示与编码转换。若被禁用,安装时环境检测会报错,运行后可能出现乱码。
按需解除:exec / shell_exec
仅在使用织梦的远程采集、HTML转PDF、自动生成缩略图等高级功能时需要。普通内容站点无需解除。
三、宝塔面板操作步骤
- 宝塔后台 - 软件商店。
- 找到 PHP 7.4(或你使用的版本)- 设置。
- 点击"禁用函数"。
- 列表中找到
putenv。 - 点击右侧"删除"。
- 确认删除,无需重启PHP即可生效。
- 如需 exec、shell_exec,按同样方式删除。
四、命令行修改php.ini
# 查找php.ini位置
php --ini
# 或宝塔路径 /www/server/php/74/etc/php.ini
# 编辑
vi /www/server/php/74/etc/php.ini
# 找到 disable_functions 行
disable_functions=passthru,exec,system,chroot,chmod,...
# 删除其中的 putenv(必删)、exec、shell_exec(按需)
# 保存后重启PHP-FPM
/etc/init.d/php-fpm-74 restart
五、验证函数是否已解除
# 创建测试文件 test.php
<?php
echo function_exists('putenv') ? 'putenv 可用' : 'putenv 被禁用';
echo function_exists('exec') ? 'exec 可用' : 'exec 被禁用';
?>
# 浏览器访问 http://yourdomain.com/test.php
# 验证后立即删除该文件
六、安装向导检测
访问 /install/,环境检测页面会列出被禁用的关键函数。若 putenv 显示红叉,必须解除后才能继续安装。
七、安全建议
仅解除织梦明确需要的函数,切勿为图方便把 disable_functions 清空;exec、shell_exec、system 等命令执行函数若非必须,建议保留禁用,避免被getshell后任意执行命令。
最小化解除原则
- 纯内容展示站点:仅解除 putenv。
- 有采集需求:再解除 exec、shell_exec。
- 需要PDF生成、视频处理:再解除 system、passthru。
八、注意事项
解除函数后建议在站点层面增加防护:安装宝塔WAF防火墙、限制PHP文件上传、定期扫描webshell;对 install、data、templets 等目录禁止PHP执行,从源头降低被利用风险。
九、行动指引
安装前按清单精准解除函数,安装完成后回顾是否有多余解除项,能恢复的尽量恢复;生产环境务必配合WAF与定期备份,避免因函数放开带来的潜在安全风险。