You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 5.6环境下preg_replace()/e修饰符弃用报错及CPU占用问题求助

解决PHP preg_replace /e修饰符弃用导致的CPU过高问题

问题原因

你的CPU占用过高和日志里的警告直接相关:PHP 5.5起就标记preg_replace()的/e修饰符为弃用,虽然PHP 5.6还允许使用,但每次执行都会触发警告日志。大量的警告日志写入操作会消耗CPU资源,同时/e修饰符通过eval()执行字符串的方式本身效率也低于替代方案,双重因素推高了CPU占用。

具体解决步骤

方案1:手动修改代码(临时修复)

  1. 登录主机文件管理界面,找到路径/data/vhosts/e-compa.com/httpdocs/smforum/Sources/Load.php
  2. 定位到第225行附近生成运行时函数的代码,找到使用preg_replace(..., '/e')的语句
  3. 将其替换为preg_replace_callback()写法:
    • 原代码示例(类似结构):
      preg_replace('/(\w+)/e', 'strtoupper("$1")', $content);
      
    • 修改后代码:
      preg_replace_callback('/(\w+)/', function($matches) {
          return strtoupper($matches[1]);
      }, $content);
      
    核心逻辑是把原来/e后面的回调字符串,改成匿名函数,用$matches数组接收正则匹配到的内容。
  4. 保存文件后刷新网站测试功能,同时观察CPU占用和日志是否还有该警告。

方案2:升级论坛程序(长期稳妥方案)

你使用的是SMF论坛,官方后续版本已经修复了这类PHP兼容问题。直接下载兼容PHP 5.6的最新SMF版本,按照官方升级指南替换核心文件(记得先备份网站数据和文件),可一次性解决所有类似兼容警告,避免手动改代码出错的风险。

注意事项

  • 修改任何文件前,务必先备份原文件,防止操作失误导致网站崩溃
  • 若手动修改后出现功能异常,立即恢复备份文件,再尝试方案2

内容的提问来源于stack exchange,提问作者Andrea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:30:11