尝试捕捉在 PHP 中不起作用?

Try catch not working in PHP?

我正在从事网络服务方面的工作。

我正在尝试捕捉错误。我的问题代码是:

    try
    {
    $query = "UPDATE Users
              SET 
                Latitude=?,
                Longitude=?,
                Address=?,
                LocationTimestamp=?
              WHERE Id=?";

        $stmt = $this->link->prepare($query);
        $stmt->bind_param('ddssi', $Latitude, $Longitude, $Address, $LocationTimestamp, $Id);
        $stmt->execute();


        $affected_rows = $stmt->affected_rows;

    }

    catch(Exception $exc)
    {
        file_put_contents("log/error.txt",$exc->getMessage());
    }

我预计,该 catch 块将捕获所有错误并且 PHP 不会在输出中产生任何错误。但是 - 在输出中我看到这样的东西:

Warning: Creating default object from empty value in /srv/webservice/server.php on line 119

我想避免输出任何 HTML,因为这是网络服务,我在客户端有 JSON 解释器。

我的问题是:

当我无法访问 PHP 输出时,如何像这样调试服务?我想将所有错误、警告等重定向到文件。

警告不是异常.....您可以捕获异常,但不能 Warnings/Notices/Errors/etc。如果你想让警告可以捕获,你需要使用 set_error_handler()

将它们转换为带有用户定义的错误处理程序的异常
class MyCustomException extends Exception {
    public static function errorHandlerCallback($code, $string, $file, $line, $context) {
        $e = new self($string, $code);
        $e->line = $line;
        $e->file = $file;
        throw $e;
    }
}

set_error_handler(['MyCustomException', 'errorHandlerCallback'], E_ALL);

您收到 PHP 警告,而不是异常。也许这有助于直接保存您的错误:

ini_set("log_errors", true);
ini_set("error_log", "log/error.txt");

这会将所有 PHP 错误和警告(以及通知)记录到此文件中。

在代码块之后,您可以禁用它,如果您愿意的话:

ini_set("log_errors", false);