
快速下载链接:https://yunpan.lunan.cloud/s/6VoI1
插件目录 1778938958-tencent-cloud-cos(路南 COS PHP8 专版 v1.0.10)
修复文件 class-tencent-cloud-cos.php
影响功能 文章内容处理中的「文档预览」正则匹配 tcwpcosImageProcessing
问题现象
在 PHP 7.3 及以上(含 PHP 8.0 / 8.1 / 8.2)的 WordPress 站点上,使用旧版腾讯云 COS 插件时可能出现:
- 媒体库上传失败或行为异常
- 后台/前台出现
preg_match_all/preg_replace相关警告或致命错误 - 典型报错:
preg_match_all(): Compilation failed: PCRE2 does not support \F, \L, \l, \N{name}, \U, or \u at offset ...
开启「文档预览」后,访问含中文路径附件链接的文章时更容易触发。
问题定位:插件与高版本 PHP 的兼容性 Bug
根因不在 COS 密钥或桶配置,而是 正则引擎从 PCRE 升级到 PCRE2 后的语法不兼容。
| 项目 | 说明 |
|---|---|
| 触发版本 | PHP 7.3+ 默认使用 PCRE2 |
| 问题代码位置 | class-tencent-cloud-cos.php 中 tcwpcosImageProcessing() 文档预览逻辑(约第 512–538 行) |
| 旧写法 | 正则字符类中使用 \u4e00-\u9fa5 等 PCRE1 旧 Unicode 语法 |
| 后果 | 正则编译失败 → preg_match_all() 报错 → 钩子执行中断 → 影响站点稳定性 |
该函数通过 the_content 过滤器挂载,文章渲染时执行;若错误被提升为异常,可能导致整站/后台异常,易被误认为上传故障。
已实施的修复(本专版)
在 路南 COS PHP8 专版 中,已将两处文档预览正则 $pattern 改为 PCRE2 兼容写法:
修复前(PCRE1 旧语法,PHP 7.3+ 编译失败):
// 示意:字符类内使用 \uXXXX
$pattern = '/...([\/]?[\u4e00-\u9fa5]+)(.*)\">/';
preg_match_all($pattern, $content, $matches);
修复后(PCRE2 + UTF-8 模式):
$pattern = '//u';
preg_match_all($pattern, $content, $matches);
经典编辑器分支已同步修复:
$pattern = '/
/u'; preg_match_all($pattern, $content, $matches);
修复要点:
\u4e00-\u9fa5→\x{4e00}-\x{9fa5}(Unicode 码点标准写法)- 正则末尾增加
/u修饰符(UTF-8 字符串模式) - 功能保持不变:仍用于匹配 URL 路径中的中文片段
未修复旧包处理方案(按优先级)
方案 1:直接修改插件代码(最快)
- 通过 FTP/面板打开:
wp-content/plugins/1778938958-tencent-cloud-cos/class-tencent-cloud-cos.php - 搜索文档预览相关
$pattern(约 517、537 行附近) - 将
[\u4e00-\u9fa5]改为[\x{4e00}-\x{9fa5}],并确保正则以/u结尾 - 保存后刷新后台,测试上传与中文文件名附件预览
方案 2:更换兼容版本(推荐长期)
- 使用已修复 PCRE2 的专版(如本次 路南 COS PHP8 专版)
- 或使用 WordPress 官方仓库持续维护的版本
- 避免使用多年未更新的旧包
方案 3:临时降级 PHP(仅应急)
- 降级到 PHP 7.2 及以下可临时避开 PCRE2,但存在安全风险,不建议长期使用
验证修复是否生效
- PHP 版本:≥ 7.3(建议 8.0+)
- 上传测试:媒体库上传无
preg_*报错 - 文档预览:docx/pdf 等附件预览正常插入 iframe
- 错误日志:插件日志目录无正则编译错误
说明:若出现 403 Forbidden / Signature invalid,属于 COS 密钥/桶配置问题,与本次 PCRE2 修复无关。
小结
| 状态 | 内容 |
|---|---|
| 问题类型 | PHP 7.3+ / PCRE2 不兼容旧正则 \u 语法 |
| 修复方式 | \x{4e00}-\x{9fa5} + /u 修饰符 |
| 本专版状态 | 已合入修复,PHP 8 环境可正常使用文档预览 |
Comments NOTHING