Мое приложение создает динамические отчеты, созданные пользователями, которые могут создавать запросы, которые возвращают деление на ноль.
Когда это происходит, ZF2 ловит это с Zend\Db\Adapter\Exception\InvalidQueryException
отобразить исключение и остановить мой скрипт.
Мне нужно продолжить выполнение скрипта, даже когда это произойдет, потому что приложение покажет 0
в этих расчетах и отчет все равно будет показан.
Я уже отключил эти настройки в config/autoload/local.php
и я уверен global.php
не перезаписывает их:
'phpSettings' => array(
'display_startup_errors' => false,
'display_errors' => false,
'error_reporting' => 0,
),
'view_manager' => array(
'display_not_found_reason' => false,
'display_exceptions' => false,
),
Сценарий по-прежнему останавливается и показывает мою пользовательскую страницу «ошибки», единственное отличие состоит в том, что он скрывает детали исключений.
Как сохранить работоспособность скрипта / приложения, даже если division by zero
происходит?
Я уже видел другие вопросы о display_exceptions=false
но, как вы можете видеть, это не помогло мне.
Я бы предпочел решение без внесения изменений в процесс создания запроса, потому что оно очень сложное, но я принимаю все предложения.
Вы можете просто захватить исключение самостоятельно, выполнив попытку поиска по запросу
try {
// try to run the query that might throw the exception.
} catch (\Zend\Db\Adapter\Exception\InvalidQueryException $e) {
// do set the result to zero.
}
Рассматривали ли вы в своем сценарии тестирование, если знаменатель равен 0 до это на самом деле рассчитывается? Если это так, вы можете пропустить расчет и сразу вернуть строку или другое число. Таким образом, вы бы избежали деление на ноль ошибка.
пример
function getStatistics($returned_value) {
if ($returned_value == 0) {
//Cannot compute
return "Impossible";
} else {
//Do the calculation
return 100/$returned_value; //For example
}
}