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

PHP 8.2中setcookie()传null给$domain参数触发废弃警告求助

解决PHP 8.2中setcookie()的废弃警告问题

问题原因

PHP 8.2开始,setcookie()函数的第5个参数$domain要求必须是字符串类型,不再接受null值。你的函数中将$cookie_domain的默认值设为NULL,当调用函数时不传入该参数,就会把null传递给setcookie(),从而触发这个废弃警告。

解决方案

有两种可行的修改方式,核心都是确保传递给setcookie()的$domain参数为字符串类型:

方式1:修改函数的默认参数值

直接将$cookie_domain的默认值从NULL改为空字符串'',空字符串在setcookie()中的作用和原来的null一致(表示cookie适用于当前域),同时符合PHP 8.2的类型要求。

修改后的代码:

function qtranxf_setcookie_language($lang, $cookie_name, $cookie_path, $cookie_domain = '', $secure = false){
    qtranxf_dbg_log('qtranxf_setcookie_language: lang='.$lang.'; cookie_name='.$cookie_name.'; cookie_path='.$cookie_path);
    setcookie($cookie_name, $lang, time()+31536000, $cookie_path, $cookie_domain, $secure);//one year
    //two weeks 1209600
}

方式2:在调用setcookie()时转换参数

如果需要保留函数原有的默认参数定义(比如兼容其他依赖null的调用场景),可以在调用setcookie()前,将null值转换为空字符串:

修改后的代码:

function qtranxf_setcookie_language($lang, $cookie_name, $cookie_path, $cookie_domain = NULL, $secure = false){
    qtranxf_dbg_log('qtranxf_setcookie_language: lang='.$lang.'; cookie_name='.$cookie_name.'; cookie_path='.$cookie_path);
    // 将null转换为空字符串,满足PHP 8.2的类型要求
    $domain = $cookie_domain ?? '';
    setcookie($cookie_name, $lang, time()+31536000, $cookie_path, $domain, $secure);//one year
    //two weeks 1209600
}

说明

两种方式都能解决废弃警告,且不会改变原有的cookie行为——空字符串作为$domain参数时,cookie依然会绑定到当前服务器的域名,和之前传null的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:42:44