PHP 8.2中setcookie()传null给$domain参数触发废弃警告求助
问题原因
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
相关产品推荐
相关产品推荐

