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

WordPress站点从PHP7.4迁移至PHP8.0后计算器页面异常求助

问题解决:PHP8.0升级后计算器页面异常及移动端Cookie问题

一、初始PHP8.0兼容性修复

升级到PHP8.0后计算器无法正常显示结果,错误日志提示Undefined array key,这是因为PHP8.0对未定义数组/键的访问会抛出警告,而PHP7.4会静默处理。针对涉及的代码行修改如下:

  1. 第145行:添加键存在判断,或使用PHP7+空合并运算符简化:
// 写法1:isset判断
$total_days_trip = isset($_COOKIE['days_2']) ? $_COOKIE['days_2'] : $_COOKIE['days'];
// 写法2:空合并运算符(更简洁)
$total_days_trip = $_COOKIE['days_2'] ?? $_COOKIE['days'];
  1. 第184行:同样对表单数据键做存在判断:
// isset判断写法
$results[$company_id]['total_days'] = isset($post_form['days_2']) ? absint($post_form['days_2']) : absint($post_form['days']);
// 空合并运算符写法
$results[$company_id]['total_days'] = absint($post_form['days_2'] ?? $post_form['days']);
  1. 第308行:先验证键存在再执行判断逻辑:
if(isset($post_form['option_to_person']) && $post_form['option_to_person']){
    // 原有业务逻辑
}

二、移动端calc_idCookie缺失问题排查

桌面端修复后移动端仍报错Undefined array key "calc_id",核心原因是移动端浏览器Cookie策略更严格,按以下步骤排查修复:

1. 完善Cookie设置参数

当前Cookie代码缺少Secure和SameSite属性,这两个属性是移动端浏览器正常存储/发送Cookie的关键:

// 修改setcookie代码,补充安全属性
setcookie(
    'calc_id', 
    $calc_ID, 
    [
        'expires' => time() + (86400 * 30),
        'path' => '/',
        'secure' => true, // HTTPS站点必须开启,HTTP测试环境设为false
        'httponly' => true, // 可选,提升Cookie安全性
        'samesite' => 'Lax' // 兼容大部分场景,也可根据需求设为'Strict'
    ]
);

2. 确保AJAX请求携带Cookie

如果计算器通过AJAX提交数据,移动端浏览器默认可能不发送Cookie,需在前端AJAX配置中添加withCredentials参数(以jQuery为例):

$.ajax({
    url: '/wp-admin/admin-ajax.php',
    type: 'POST',
    data: formData,
    xhrFields: {
        withCredentials: true
    },
    // 其他请求配置
});

3. 验证Cookie写入状态

用移动端浏览器开发者工具(Chrome调试移动端或Safari网页检查),查看存储面板中的Cookie列表,确认calc_id是否存在、路径是否为/、域名是否匹配当前站点。

4. 排除隐私模式影响

移动端浏览器的隐私/无痕模式会限制Cookie存储,测试时先关闭隐私模式再验证功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:35:33