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

PHP7升级至PHP8.1.2后TCPDF及代码弃用错误解决方案咨询

PHP7升级到PHP8.1.2后的错误修复方案

一、函数参数顺序错误(可选参数在必需参数之前)

PHP8.0开始严格要求所有可选参数必须放在必需参数之后,不再允许可选参数前置的写法,否则会触发"可选参数被隐式视为必需参数"的弃用警告。针对你的三个错误,分别处理:

1. tcpdf_fonts.php 第2024行

找到对应的函数定义,假设原代码是:

function some_function($isunicode = true, $currentfont) {
    // ...
}

修改为:

function some_function($currentfont, $isunicode = true) {
    // ...
}

同时检查项目中所有调用这个函数的地方,确保参数传递顺序正确(先传$currentfont,再传$isunicode,如果只传一个参数,就是$currentfont,不影响原有逻辑)。

2. tcpdf_static.php 第1139行

同理,找到函数定义,把$tagvspaces(必需参数)移到$tidy_options(可选参数)前面,保留$tidy_options的默认值。比如原代码:

function another_function($tidy_options = [], $tagvspaces) {
    // ...
}

修改为:

function another_function($tagvspaces, $tidy_options = []) {
    // ...
}

检查调用处的参数顺序,确保匹配新的定义。

3. Modules.php 第929行

同样调整参数顺序,把必需参数$TheDate放在可选参数$prenom前面。假设原函数:

function module_function($prenom = '', $TheDate) {
    // ...
}

修改为:

function module_function($TheDate, $prenom = '') {
    // ...
}

确认所有调用该函数的地方参数顺序正确,避免传参错误。

二、number_format()传递null参数的问题

PHP8.1开始禁止将null传递给number_format()的第一个参数(要求是float类型),解决方法是在调用前先处理null值:

解决方式1:使用空合并运算符设置默认值

在调用number_format()时,直接给参数设置默认值:

// 假设原代码是 number_format($some_var);
number_format($some_var ?? 0);

如果需要保留小数位数和千位分隔符,同样处理:

number_format($some_var ?? 0, 2, ',', '.');

解决方式2:提前检查变量

在代码开头先处理可能为null的变量:

$some_var = $some_var ?? 0; // 或者根据业务逻辑设置其他默认值
// 之后调用number_format
number_format($some_var);

额外建议

针对TCPDF的问题,更稳妥的方式是升级TCPDF到支持PHP8的版本(当前最新版本已兼容PHP8+),避免手动修改库文件带来的后续维护问题。如果暂时无法升级,上述手动调整参数顺序的方法可以解决当前警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:41