Php-fpm 即使在使用 catch 时仍然记录我的错误

Php-fpm still logging my error even when using 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 错误日志文件中记录错误: 在第 200 行投入 /var/www/html/api.php [2019 年 1 月 10 日 14:00:49 UTC] PHP 警告:SQLite3::query():无法准备语句:11,数据库磁盘映像在 /var/www/html/api.[=30 中格式错误=] 第 140 行 [2019 年 1 月 10 日 14:00:49 UTC] PHP 致命错误:未捕获错误:在 /var/www/html/api.php:141 中的布尔值上调用成员函数 fetchArray() 堆栈跟踪: #0 {主要} 在第 141

行 /var/www/html/api.php 中抛出

调用 SQLite3::enableExceptions 告诉 PHP 它应该抛出异常而不是标准错误:

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

无论如何,如果您需要尝试 100 次才能使它正常工作,那么这确实不是您应该采取的修复角度。