我一直在尝试阅读错误并找出解决方案一段时间,我似乎无法得到它。
简而言之,下面的代码抓取了显示事件的php文件的编号列表。但是,当此目录中没有php文件时,它会显示文本,抱歉,没有即将发生的事件。
$events = glob("$_SERVER[DOCUMENT_ROOT]/assets/events/shot/*.php");
if(count($events)) {
natcasesort($events);
$i=0;
foreach($events as $event) {
if($i > 3) {
break;
}
$event = basename($event);
include("$_SERVER[DOCUMENT_ROOT]/assets/events/shot/$event");
$i++;
};
}
else {
echo 'Sorry, no upcoming events.';
}
我的问题是,当目录中没有php文件时,我收到错误:
Warning: natcasesort() expects parameter 1 to be array, boolean given in /home/famili23/public_html/assets/events/shot.php on line 11
Warning: Invalid argument supplied for foreach() in /home/famili23/public_html/assets/events/shot.php on line 14
我无法想象这一个。如果有人可以帮我这个,谢谢!!
答案 0 :(得分:2)
glob
可能在出错时返回false
(我不确定哪种情况会构成错误)。投射到数组的false
将是值array(false)
,即具有一个条目false
的数组。 count
将其参数转换为数组,因此如果glob
返回false
,count(false)
将导致1
。这就是为什么它无论如何进入条件,因为$events
不是数组,以下函数都在抱怨。
由于空数组等于false
,我建议你这样做:
if ($events) ...
当且仅当glob
返回包含至少一个元素的数组时才会出现这种情况,并且在所有其他情况下返回false,包括空数组和false
。