Php-fpm все еще регистрирует мою ошибку даже при использовании catch
Файл журнала ошибок php-fpm все еще регистрирует мою ошибку, даже используя try-catch
$NUM_OF_ATTEMPTS = 100;
$attempts = 0;
do
{
try
{
$db = new SQLite3('proxies/socks5.db');
$results = $db->query('SELECT proxy FROM socks5proxies WHERE timeout <= ' . $settimeout . $countryq . ';');
while ($row = $results->fetchArray())
{
echo $row['proxy'] . "\r\n";
}
}
catch(Exception $e)
{
$attempts++;
sleep(1);
continue;
}
break;
}
while ($attempts < $NUM_OF_ATTEMPTS);
Ожидаемый результат:
Повторите попытку и не регистрируйте ошибку
Фактические результаты:
Регистрирует ошибку в файле журнала ошибок php-fpm: добавляется в /var/www/html/api.php в строке 200 [10-Jan-2019 14:00:49 UTC] Предупреждение PHP: SQLite3::query(): Невозможно подготовить оператор: 11, образ диска базы данных искажен в /var/www/html/api.php в строке 140 [10-Jan-2019 14:00:49 UTC] Неустранимая ошибка PHP: необработанная ошибка: вызов участника Функция fetchArray() для логического значения в /var/www/html/api.php:141 Трассировка стека: #0 {main} добавляется в /var/www/html/api.php в строке 141
1 ответ
Вызовите SQLite3::enableExceptions, чтобы сообщить PHP, что он должен выдавать исключения вместо стандартных ошибок:
try {
$db = new SQLite3('proxies/socks5.db');
$db->enableExceptions(true);
$results = $db->query('...');
} catch (\Exception $e) {
}
В любом случае, если вам нужно сделать 100 попыток, чтобы заставить это работать, то это действительно не тот угол, который вы должны использовать, чтобы это исправить.