PHP setCookie()为何设置了非预期变量为Cookie?
看起来你遇到了Cookie设置和预期变量不匹配的麻烦,我来帮你梳理下可能的原因和解决办法:
先确认正则提取的结果是否正确
首先得排查你用preg_match()提取价格的环节有没有问题——毕竟如果$price[0]本身就没拿到正确的浮点值,后续的Cookie设置肯定会出问题。建议在设置Cookie前先打印变量验证:var_dump($price); // 查看整个匹配数组的内容 echo $price[0]; // 确认第一个元素是不是你要的浮点价格如果这里输出的不是预期值,那得先调整正则表达式,确保能精准匹配到目标价格行里的数值。
检查Cookie设置的代码细节
假设你用PHP的setcookie()函数,要确认参数传递是否正确。浮点型数值需要转成字符串才能作为Cookie值存储,正确的写法大概是这样:// 把浮点型转成字符串类型 $targetValue = (string)$price[0]; // 按需求设置Cookie的名称、过期时间、路径等 setcookie('target_price', $targetValue, time() + 3600, '/');如果你不小心把第二个参数写成了
$ln,或者之前有代码把$ln = $price[0];,那自然不管传哪个变量结果都一样。可以检查下变量赋值的逻辑,看看两个变量是不是被意外关联了。排查变量作用域问题
如果$price是在某个函数内部定义的,那函数外部可能访问不到$price[0],这时候如果$ln是全局变量,代码就会默认用$ln的值。这种情况可以用函数返回值来传递提取到的价格:function getTargetPrice($html, $target) { // 你的正则匹配逻辑 preg_match($yourPattern, $html, $price); return isset($price[0]) ? $price[0] : null; } $extractedPrice = getTargetPrice($siteHtml, $target); if ($extractedPrice !== null) { setcookie('target_price', (string)$extractedPrice, time() + 3600, '/'); }验证Cookie的实际存储情况
有时候可能是你读取Cookie的方式有问题,误以为设置错了。设置Cookie后需要刷新页面才能在$_COOKIE里看到新值,或者直接用浏览器开发者工具(比如Chrome的Application标签)查看Cookie列表,确认实际存储的内容是什么。
内容的提问来源于stack exchange,提问作者Anton Sarg
相关产品推荐
相关产品推荐

