Php-fpm все еще регистрирует мою ошибку даже при использовании catch - PullRequest
0 голосов
/ 10 января 2019

Файл журнала ошибок 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 Ответ

0 голосов
/ 10 января 2019

Вызов SQLite3 :: enableExceptions , чтобы сообщить PHP, что он должен выдавать исключения вместо стандартных ошибок:

try {
    $db = new SQLite3('proxies/socks5.db');
    $db->enableExceptions(true);
    $results = $db->query('...');
} catch (\Exception $e) {
}

В любом случае, если вам нужно сделать 100 попыток, чтобы заставить это работать, то это действительно не тот угол, который вы должны использовать, чтобы исправить это.

...