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 попыток, чтобы заставить это работать, то это действительно не тот угол, который вы должны использовать, чтобы это исправить.

Другие вопросы по тегам