Как исправить - PHP Warning: Division by zero?
В управлении игровым сервером (SourceBans++ 1.6.3) есть такая ошибка (точнее в журналах поддомена, на котором он находится):
[Fri May 22 09:29:30.770872 2020] [php7:warn] [pid 10749] [client ip:port] PHP Warning: Division by zero in /var/www/www-userroot/data/www/bans.mysite.ru/includes/smarty/plugins/function.math.php(94) : eval()'d code on line 1, referer: iphost
Вот строка, которую он "жалуется":
eval("\$smarty_math_result = " . $equation . ";");
Вот ссылка полный код https://pastebin.com/d6WShcc1
Можно это исправить?
Ответы (1 шт):
Ошибка внутри функций smarty вызвана неверными входными данными. Вообще применение подобных функций тут весьма избыточно и излишне усложняет код шаблона (вообще не представляю зачем в смарти в принципе такой функцонал).
Расчитайте нужные значения в шаблоне.
{$nc = $smarty.now - $ban_times[$index].c}
{$ec = $ban_times[$index].e - $smarty.now}
{$w = $ec ? ($nc/$ec/100) : "какое-то значение"}
<div class="progress-bar bg-warning progress-bar-striped progress-bar-animated"
role="progressbar" aria-width="{$w}" >
Вообще не особо похоже, что ошибка в этом шаблоне, поскольку в знаменателе сравнивается $smarty.now, то есть текущая метка времени. и вероятность, что она совпадает не велика. так что я бы на вашем мсте избавился бы вообще от всех включений {math ...} из шаблонов.
и на случай, если у вас там все это дело выводится в виде
{foreach $ban_times as $index => $v}
то в формулах можно использовать {$v.c}, {$v.e} а не {$ban_times[$index]}