你有没有迁移完phpcms网站,突然蹦出来一堆环境变量相关的报错,后台进不去前台也乱码?我之前帮客户改老站的时候碰到过一次,一开始以为是多大的事,折腾半天发现就是个小细节错了,今天把踩过的坑都给你整理好。
配置文件里变量写错了,这个得占八成以上的情况。很多人迁移网站的时候,复制配置东改西改,要么多打了空格,要么变量名少打了字母,要么引号配对错了。说白了就像你寄快递填手机号,多按一个数字肯定寄不到,对吧?
PHP版本不兼容,变量解析不了,大部分老phpcms都是适配php5.x、php7.0,你硬扔到php7.4甚至php8上面,很多旧写法的全局环境变量根本不识别,不报错才奇怪。
服务器禁用了getenv读取函数,现在很多服务商为了安全默认禁了一些敏感函数,刚好用环境变量的phpcms要调用getenv,直接就给你抛错。
一般用环境变量的phpcms,配置都在根目录或者cache/configs/下面的数据库配置文件里,打开看一眼是不是这么写的:
把所有多余的空格、错写的引号、多余转义字符全删掉,保证每个变量调用都干净工整,这一步走完,一半的报错直接就没了。

如果切了高版本PHP之后报错,嫌换版本麻烦的话,加几行兼容代码就行,打开入口文件index.php,在最开头加上这段:
``` // 兼容高版本PHP环境变量注册 if (!isset($GLOBALS['DB_HOST']) && getenv('DB_HOST')) { $GLOBALS['DB_HOST'] = getenv('DB_HOST'); } ```不想改代码更简单,直接去服务器面板把PHP版本切到5.6或者7.0,老phpcms跑这两个版本稳得不行,啥问题都没有。
查到是函数被禁用了,选哪个方法都行,看你需求。
直接去服务器面板的禁用函数管理里,把getenv删掉解禁,都是可视化操作,点两下保存就完事,不用改服务器配置。
不想解禁也没关系,直接把环境变量写死进配置。原来的'hostname' => getenv('DB_HOST'),直接改成'hostname' => 'localhost',换成你自己的实际参数,应急用完全没问题,就是下次迁移记得改。
改完任何配置,记得清phpcms的缓存啊!好多人改完刷了十分钟还是报错,就是忘了清缓存,去根目录的cache文件夹,把里面除了index.html的所有文件都删掉,再刷新页面,基本就好了。
说真的,这个报错真不是啥大问题,都是换环境迁移的时候细节没注意,按上面几步走,新手也能搞定。要是你碰到别的奇怪报错,留个言我帮你想办法。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图