小皮面板PHP版本切换后网站报错怎么办
学会这篇,你就能在小皮面板切换 PHP 版本后,按「看日志 → 查版本 → 补扩展 → 改配置 → 回退」的顺序把网站报错一步步解决掉。
第一步:先看报错原文和日志
这一步要做的是拿到真实错误信息,做完你会知道是致命错误(Fatal error)还是警告(Warning),以及出错的文件名和行号。
先在浏览器直接访问站点首页,把红字报错整段复制下来。典型长这样:Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /www/wwwroot/demo/config.php on line 8。
再看日志。小皮面板 Linux 版:左侧菜单「网站」→ 找到对应站点 →「网站日志」标签页,切换到 PHP 错误日志;文件路径一般是 /www/server/php/74/var/log/php-fpm.log,命令行用 tail -f /www/server/php/74/var/log/php-fpm.log 实时看。Windows 版 phpStudy:主界面右下角「日志」→「PHP 错误日志」,文件在 phpstudy_pro\Extensions\tmp\php_error.log。
注意:报错里的行号往往是「调用点」,真正的错误函数名更关键。看到
Call to undefined function xxx()就直接记住xxx,这是找扩展的线索。
第二步:确认站点绑的是哪个 PHP 版本
这一步是核对站点和版本的绑定关系,做完你能确定「是不是切错版本了」。
Windows 版 phpStudy:主界面「网站」→ 找到站点 → 右侧「管理」→「修改」→ 弹窗里看「PHP 版本」下拉框,例如 php-7.4.3nts,点「确定」保存。
小皮面板 Linux:左侧「网站」→ 站点右侧「设置」→「网站配置」区域选 PHP 版本,例如 PHP-7.4,点「保存」,面板会自动重载 Nginx。
想在命令行确认,在站点根目录建一个 info.php,内容写 <?php phpinfo();,浏览器访问 你的域名/info.php,页首就是当前实际版本。命令行查扩展用 /www/server/php/74/bin/php -m。
注意:Windows 版 PHP 分
nts(非线程安全,配 Nginx)和ts(线程安全,配 Apache/IIS)。Nginx 站点选成ts版本会直接 502。
第三步:按错误类型对症处理
这一步是真正动手修,做完报错应该消失。切换版本后的报错基本逃不出下面三类。
第一类:代码不兼容。 表现为 Fatal error 或 Parse error。PHP 7.0 移除了 mysql_connect()、mysql_query() 这组函数;PHP 7.2 移除了 each()、create_function();PHP 8.0 移除了 $str{0} 这种花括号写法,未定义变量也会抛 TypeError。老程序(Discuz 老版本、织梦、部分 ThinkPHP 3.2 项目)最容易中招。改代码成本高时,最省事的办法是按第二步把版本切回原来的 5.6 或 7.1,再重启 PHP。
第二类:扩展没启用。 表现为 Call to undefined function。Windows 版:「软件管理」→ 左侧「PHP 扩展」→ 顶部选中对应版本(如 php-7.4.3nts)→ 勾选 mysqli、pdo_mysql、curl、gd、fileinfo、openssl、mbstring →「确定」。Linux 版:「软件商店」→ 已安装 → PHP-7.4 →「设置」→「安装扩展」→ 勾选安装。
注意:切换 PHP 版本后,扩展不会自动跟过去,必须在新版本里重新勾选一遍,这是最常见的一个坑。
第三类:禁用函数或 php.ini 配置。 很多面板默认在 disable_functions 里禁掉 exec、system、proc_open、putenv、symlink。入口:Windows 版「软件管理」→「PHP」→ 对应版本「配置」;Linux 版「软件商店」→ PHP-7.4 →「设置」→「配置文件」,编辑路径是 /www/server/php/74/etc/php.ini。搜索 disable_functions,把需要的函数名删掉;老程序用短标签就把 short_open_tag = Off 改成 On。保存后必须重启 PHP:Windows 版点主界面「重启」→「重启 PHP」;Linux 版在 PHP 设置里点「重启」。
第四步:检查伪静态和数据库连接
这一步排查的是「代码没报错但页面 404 或连不上库」。进入站点伪静态设置:Windows 版「网站」→「管理」→「修改」→「伪静态」;Linux 版站点「设置」→「伪静态」,选对应程序规则(wordpress、thinkphp、laravel5)。
数据库报错的,先确认第二步里的 mysqli 扩展已开,再把配置文件里的 host 从 localhost 改成 127.0.0.1,避免 socket 路径不一致。
第五步:验证并准备回退
做完看结果:网站正常打开,日志文件不再追加新错误。顺手删掉站点目录下的 runtime/cache、data/cache 之类的缓存目录再刷新一次。如果代码实在改不动,就按第二步把版本切回原版本,重启 PHP 和网站,先恢复访问再慢慢升级代码。
小结
- 先读报错和日志,别上来就改配置
- 用「网站 → 管理/设置」确认站点绑定的 PHP 版本,Windows 注意
nts/ts区别 - 三类常见原因:代码不兼容、扩展没勾选、
disable_functions禁用函数 - 切版本后要重新勾扩展、改 php.ini,并且一定重启 PHP
- 改不动代码就回退旧版本,保证站点先能访问
原文链接:https://www.gj0.com/thread-308.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。