在我的网站上,我允许人们上传图库。当他们单击图像时,在底部有一个下一个和上一个按钮,因此他们可以轻松地在图像中来回滚动。
我在/ opt / cpanel / ea-php72 / root / usr / var / log / php-fpm /
的日志中收到以下错误public void updateFileWithFilename(String id, String name) {
fileManagementRepository.updateFile(Long.parseLong(id), name);
}
public boolean createFileWithFilename(String name, String filename, String createdBy, Date createdDate, boolean isActive, boolean isDeleted) {
fileManagementRepository.createFileWithFilename(name, filename, createdBy, createdDate, isActive, isDeleted);
return true;
}
它正在谈论我的代码中的以下行:
NOTICE: PHP message: PHP Warning: count(): Parameter must be an array or an object that implements Countable in . . . on line 12
下面是该行随附的其他代码:
$max = count($photos);
基本上,此代码使用 get_field('gallery')获取图库中的照片总数,并将编号分配给变量 max 。
其余代码是 next 和 previous 按钮的工作方式。
我不知道怎么了。有人可以帮忙吗?
答案 0 :(得分:0)
通常,解决方案很简单:
第一个带有var_dump()
返回$photos
的调试。比你会知道是什么问题。
count()
接受数组,如果您有false
,null
或其他任何内容,则会出错。
只需执行以下操作:
$photos = get_field('gallery');
if(!is_array($photos) || empty($photos)) $photos = array(); // FIX ERROR!!!
$max = count($photos); <------- error line here -------->
$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0;
if ($current > 0) {
if ($current > $max) $current = $max;
if ($current < 1) $current = 1;
}
$next = (($current + 1) < $max) ? ($current + 1) : $max;
$prev = (($current - 1) > 1) ? ($current - 1) : 1;
?>
在if(!is_array($photos) || empty($photos)) $photos = array();
之前使用$max = count($photos);
,您可以解决问题,所有非数组或空(0,NULL,FALSE,'')的内容都将得到修复,并且计数{{1 }}的结果为$max
,因为数组为空。
您不应该这样工作。您需要知道在变量中收到和期望得到哪些信息。代码必须保持干净,更正此类错误是一种不好的做法。如果收到一个数组,则该数组是预期的,并且在进行任何计算之前必须先进行检查。
您也有错误
0
我将其修复为:
$current = (isset($_GET['image'])) ? intval($_GET['image']) : false;
if ($current !== false)
这样做的原因是,您在下面进行了计算,而您并不期望$current = (isset($_GET['image']) && !empty($_GET['image']) && is_numeric($_GET['image'])) ? intval($_GET['image']) : 0;
if ($current > 0)
会很好。 (false + 1)
可以翻译为false
,但在您的情况下,您也会遇到错误。在这种情况下,我将0
替换为false
,添加了0
和empty()
检查,那里没有错误。