作者nightwind209 (夜风)
看板PHP
标题[闲聊] 从PHP7升级到PHP8後 解决count()的错误
时间Tue Jun 25 19:30:35 2024
先感谢shadowjohn与andylamyy板友提供的解法
修改完後问题就解决了,PHP系统也升级到8.2.20了
以下是这次除错前後的资料整理
作个纪录当参考
起因
原本在PHP7能运行的count()程式段,在PHP8会报error
Exception: count(): Argument #1 ($value) must be of type Countable|array,
null given X:\\count_demo.php 434
434为if(count($new_TimestampTitle)>0){
报错原因
因为count()在PHP8需要是array或是countable,否则会报TypeError
在PHP7时期只会跳warning
https://www.php.net/manual/en/function.count.php
范例档案
https://pastebin.com/GkPQk2q3
解决方案
第一种:先作宣告
於第425行後加上以下两条
$new_Timestamp = [];
$new_TimestampTitle = [];
第二种:加上is_countable()
将434的if(count($new_TimestampTitle)>0){
改为if (is_countable($new_TimestampTitle) && count($new_TimestampTitle) > 0) {
两种方式执行在PHP8都不会报错
第一种是板友的建议
第二种是ChatGPT的建议
至於两者执行结果有什麽差别我就不懂了@@
感谢各位的协助
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.36.173.230 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1719315042.A.EFE.html
1F:→ p2k: Windows + PHP 请留意最近的高风险漏洞 CVE-2024-4577 06/25 22:02
2F:→ nightwind209: 也是担心漏洞问题,才想升级 06/26 06:46
3F:→ shadowjohn: tblclip_model.php 434 前几行看看 06/26 09:14
4F:→ shadowjohn: 感觉应该不是用 count 要用 mb_strlen 或 strlen 吧? 06/26 09:14
5F:→ shadowjohn: 看起来像是只是要算字数 06/26 09:15
6F:→ nightwind209: 我把tblclip_model.php 434前後的码放上去了 谢谢 06/26 11:10
7F:→ andylamyy: PHP8 阵列在count前要先宣告$new_TimestampTitle = []; 06/26 13:28
8F:→ shadowjohn: 425 $new_Timestamp = []; $new_TimestampTitle = []; 06/26 14:52
9F:→ shadowjohn: 回了,试试:) 06/26 14:53
10F:→ nightwind209: 谢谢几位的建议,我会试试看的,感谢 06/26 17:33
※ 编辑: nightwind209 (114.36.169.42 台湾), 06/28/2024 14:36:45