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

Ubuntu20.04+PHP7.4环境preg_replace编译失败报错问题咨询

报错触发原因

这个错误是Ubuntu 20.04系统的libpcre3软件包版本与PHP7.4的PCRE扩展不兼容导致的:2022年后Ubuntu官方源推送的libpcre3安全更新(版本号2:8.44-2ubuntu0.1及以上)新增了部分编译选项位,而PHP7.4及更低版本编译时使用的是旧版PCRE库,无法识别这些新的选项位,解析正则表达式时就会抛出该错误。你使用的CodeIgniter框架核心函数remove_invisible_characters中的正则携带了S(PCRE_STUDY)修饰符,刚好触发了这个兼容问题。

可行解决方法
  • 方法一:降级libpcre3包(最快速,无需修改业务代码)
    依次执行以下命令:
    1. 降级libpcre3到兼容版本:sudo apt install libpcre3=2:8.39-12build1
    2. 锁定包版本,避免后续自动更新重新触发问题:sudo apt-mark hold libpcre3
    3. 重启PHP-FPM或Apache服务生效
  • 方法二:升级PHP版本(长期方案,推荐使用)
    升级PHP到8.0及以上稳定版本,高版本PHP的PCRE扩展已经适配了新版libpcre3的特性,不存在兼容问题。升级完成后需验证自身业务代码、当前使用的CodeIgniter版本对高版本PHP的兼容性,确认无误后即可上线。
  • 方法三:临时修改框架核心代码(应急使用,不推荐长期部署)
    打开core/Common.php文件,找到行号725附近的正则表达式:
    $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
    
    删除末尾的S修饰符,修改为:
    $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/';
    
    保存文件后重启服务即可生效,该修改仅牺牲极少量正则匹配性能,不影响正常功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:08