尝试捕捉在 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);
我正在从事网络服务方面的工作。
我正在尝试捕捉错误。我的问题代码是:
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);