【发布时间】:2022-11-09 23:16:40
【问题描述】:
所以我升级到 PHP 8 并运行我的脚本,这给了我这个错误:
致命错误:未捕获的类型错误:count():参数 #1 ($value) 必须是 Countable|array 类型,在 C:\xampp\htdocs\app\includes\functions\create_session.php:78 中给出 null
堆栈跟踪:
#0 C:\xampp\htdocs\public\front_desk.php(508): 会话->check_subfeature_access(22, 0)
#1 {main} 在第 78 行的 C:\xampp\htdocs\app\includes\functions\create_session.php 中抛出事实证明,这是由于 PHP 8 中的新更新不允许在 count 函数中使用非数组值并引发致命错误,从而停止进一步的脚本执行。例如,如果你有一个
$_POST['checkboxes_checked']并且你做了count($_POST['checkboxes_checked'])那么它会给出上述错误,因为默认情况下它不会将它识别为一个数组。要修复此错误,您可以执行以下操作:count((array)$_POST['checkboxes_checked'])),它可以修复问题。但是,就我而言,问题是我有几百个文件需要修复这个问题,我不想进入每个文件并修复它,因为那将非常耗时。有没有办法将 PHP 8 配置为忽略这一点并继续使用这些 $_POST 参数进行计数功能?或者某种搜索/替换正则表达式,我可以在所有将
count($_POST['some_parameter_name'])替换为count((array)$_POST['some_parameter_name']))的文件上运行?老实说,我不知道如何在不手动进入每个文件的情况下解决这个问题,这就是我需要你帮助的部分。
【问题讨论】:
-
错误,
$_POST是一个数组,但没有理由假设$_POST['checkboxes_checked']是一个数组,因为没有选中复选框,它甚至不存在。所以实际上问题是草率的编码 -
类似于 RiggsFolly 的评论(在我发布我的评论前几秒钟出现)......除非你是期待POST 数据的特定项目中的数组,你为什么要首先尝试计算它?当然,当您编写代码时,您会知道它是要提交一个数组还是单个值。
-
@RiggsFolly 嗯,你说得有道理,我只是尝试了相同的代码,没有选中任何复选框并使用 PHP 7.3 服务器提交,结果发现,数组不存在,因为没有单击名称为的复选框
checkboxes_checked[]。 -
@KIKOSoftware 在做之前三思而后行。您不想对整个网络上使用的东西负责,例如用作假 SQL 注入保护器的可怕 ClearUp() 函数:)
-
@RiggsFolly:哈哈,是的,那不好。我只是想提供一个临时解决方案。最后,编写或修改代码的人要为他们所做的事情负责。