<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>当您设有错误处理基础架构时,使用TRIGGE_ERROR()触发错误非常有用,从而使您可以统一处理自定义错误以及PHP提出的错误和警告。 如果要实现自定义错误处理策略,例如根据其严重性向数据库发送电子邮件或记录错误,则需要使用SET_ERROR_HANDLER()来定义自定义错误处理程序。该函数接受两个参数:回调函数或静态方法,该方法将在增加错误时被调用,并且(可选)错误级别函数/方法处理。回调的签名是:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>上面的摘要注册了一个错误处理程序,该处理程序执行以下操作:当出现非致命错误时,记录将插入数据库中,而不是显示错误并将其记录到文件中;当发生致命错误时,它将在数据库中记录并终止您的脚本。 但是,您应该注意的自定义错误处理程序有一些局限性。错误处理程序绕过PHP的标准错误处理行为,因此无法处理处理程序本身可能出现的错误。例如,如果数据库服务器关闭,则上述功能将无法记录日志。此外,错误处理程序无法捕获某些内部错误,例如e_core_error和e_compile_error,或同一文件中的e_strict错误,因为这些错误在处理程序有机会注册之前发生。 使用异常来处理错误
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>上面的代码定义了两种新的自定义类型,nameException 和EmailException,可用于指示不同的错误。然后在Try块中,代码检查是否已为变量$ name和$ email提供了值。如果两个是空的,则使用掷抛出适当的例外。执行相应的捕获块,以处理错误。
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) { </span></span><span> <span>static $db; </span></span><span> <span>if (empty($db)) { </span></span><span> <span>$db = new PDO(DSN, DBUSER, DBPASS); </span></span><span> <span>} </span></span><span> </span><span> <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())"; </span></span><span> <span>$stmt = $db->prepare($query); </span></span><span> </span><span> <span>switch ($errno) { </span></span><span> <span>case E_NOTICE: </span></span><span> <span>case E_USER_NOTICE: </span></span><span> <span>case E_DEPRECATED: </span></span><span> <span>case E_USER_DEPRECATED: </span></span><span> <span>case E_STRICT: </span></span><span> <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_WARNING: </span></span><span> <span>case E_USER_WARNING: </span></span><span> <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_ERROR: </span></span><span> <span>case E_USER_ERROR: </span></span><span> <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline)); </span></span><span> <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> </span><span> <span>default: </span></span><span> <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>set_error_handler("errorHandler"); </span></span><span> </span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE); </span></span><span><span>}</span></span>
> php?
如何处理PHP?
>
>如何关闭PHP中的错误报告?但是,关闭错误报告不建议用于实时网站,因为它可能会使很难识别和修复问题。>
@ operator in php中的 @ operator用于抑制错误消息。当将PHP中的表达式添加到一个表达式中时,该表达式可能生成的任何错误消息都将被忽略。>
php提供error_log()函数以将错误消息发送到服务器的错误日志或指定文件。此功能可用于跟踪错误和调试。您还可以通过更改php.ini文件中的log_errors指令来配置php以记录所有错误。
以上是phpmaster | PHP中的错误处理的详细内容。更多信息请关注PHP中文网其他相关文章!