phpmaster | PHP中的错误处理
钥匙要点
-
PHP错误处理对于维持Web应用程序的完整性和功能至关重要。它有助于识别和修复脚本执行期间可能出现的问题,从而通过控制发生错误时看到的内容来改善用户体验。
PHP提供了多个用于错误处理的内置功能,包括日志记录和显示它们。它还提供了通过注册错误处理程序和使用异常来自定义错误处理策略的灵活性。
可以使用set_error_handler()和set_exception_handler()函数来实现PHP中的自定义错误处理。这些允许开发人员定义自定义错误处理规则和异常,这对于记录错误或发送错误通知可能很有用。
PHP中的
- 例外是脚本执行过程中发生的事件,破坏了指令的正常流程。可以使用尝试,捕捉并最终阻止它们来处理它们。如果在抛出异常时找不到捕获块,则PHP将显示致命错误并停止执行脚本。
- php错误报告级别
- 所有错误和警告都应记录。根据错误的严重性,应将通知发送给其他系统/团队。为了更好地评估其严重性,PHP提供了几个内置错误级别来描述错误的性质。每个级别都由整数值表示,并命名为常数,可以由程序员使用。下表取自官方的PHP文档,并显示了一些不同的级别。
- 可以将级别与位操作员一起掩盖,以包括或从PHP的配置中减去它们。例如,e_all | e_strict通过添加e_strict启用所有错误和警告(在5.4之前的PHP版本中必需)。 PHP提供了一些与记录和显示错误有关的配置指令。它们的价值通常取决于系统在开发还是生产环境中。该表显示了一些与错误相关的指令。
可以在php.ini,Web服务器配置文件(httpd.conf或.htaccess文件)中设置配置指令,也可以使用ini_set()函数在脚本中在运行时设置。阅读文档以获取有关指令以及如何/在何处设置它们的更多信息。
创建自定义错误处理程序
不向最终用户显示原始错误也是一个好习惯。显示的错误应用友好的自定义错误消息抽象。 PHP不仅提供了用于记录和显示错误的内置功能,而且还提供了提高错误的功能。您可以使用trigger_error()务实触发特定级别的错误。例如,此代码会触发e_user_notice警告,如果$ test的值大于1:<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>
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中的例外情况(或其任何子类)表示。可以使用掷球来抬起它们,并可以使用尝试/捕获块捕获。您可以扩展异常以创建自定义类型以捕获特定错误。 可能触发异常的代码将放置在TRY块中,并且要处理异常的代码将其放置在捕获块中。考虑以下片段:
如果虚拟getDatafromService()方法抛出了例外,则将捕获在捕获块中,并将显示一条消息。如果GetDataFromService()成功执行,那么该流将通过捕获块并继续整个脚本的其余部分。任何被抛出且未捕获的例外都会产生e_fatal错误,并在“无人例外”中产生E_FATAL错误。 异常类提供了六种不同的方法来访问有关引起问题的信息的信息,如下表所示。handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
创建自定义异常处理程序
PHP会让您像一个例外一样将任何对象扔掉,但是根据经验,例外应扩展PHP的内置异常类。根据对象的类型,您可以以不同的方式处理异常。自定常处理可以执行合适的操作,例如文件中的记录错误消息,提供有关通过检查调用堆栈等发生的行的确切详细信息。请查看此示例:<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>
重新投入异常
尝试/捕获块可以嵌套。有时,您需要捕获异常,查看其某些属性,然后再次将其扔掉以让父母捕获块处理它。这通常对于检查错误条件并确定是否应致命是有用的。此示例代码演示了重新投入一个例外:handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
>未接收的异常处理程序
类似于SET_ERROR_HANDLER()允许您指定函数来处理运行时错误的方式类似,SET_EXECTION_HANDLER()函数允许您处理使其一直沿呼叫堆栈的异常处理而不会被任何捕获块捕获。例如,如果异常使它一直沿您的堆栈上升,那么最好将其记录在日志文件中。您可以创建一个回调函数,并在set_exception_handler()中注册,如下示例所示。<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提供多种内置功能,用于处理错误条件,包括日志记录和显示它们。它还为您提供了通过注册错误处理程序和使用异常来自定义错误处理策略的灵活性。错误是生活的事实,但希望我在本文中提供的信息将帮助您更优雅地处理它们。 >图像通过Ilya Andriyanov / shutterstock>常见问题(常见问题解答)有关php
中错误处理的问题>在PHP中处理错误的重要性是什么?
> PHP中的错误处理对于维持Web应用程序的完整性和功能至关重要。它可以帮助开发人员识别并解决在执行脚本期间可能出现的问题。如果没有适当的错误处理,次要问题可能会导致重大问题,例如崩溃应用程序或向用户展示敏感信息。它还改善了用户体验,因为它允许开发人员控制发生错误时看到的内容,而不是显示令人困惑的错误消息。> PHP默认如何处理错误?
默认情况下,PHP将错误报告发送到服务器的错误日志并在屏幕上显示错误消息。对于实时网站而言,此行为不是理想的选择,因为它可以向用户揭示敏感信息。因此,建议更改现场网站的默认错误处理设置。> php?
如何自定义PHP中的错误处理?这些功能允许您定义自定义错误处理规则和异常。您可以指定一个自定义函数来处理错误,该功能对于记录错误或发送错误通知很有用。
>> php?
>的例外是一个例外情况,是在执行脚本中破坏脚本指令正常流程的脚本时发生的事件。当抛出异常时,PHP将停止执行脚本并开始寻找一个捕获块来处理异常。如果找不到捕获块,PHP将显示致命的错误并停止执行脚本。
如何处理PHP?
>
>如何关闭PHP中的错误报告?但是,关闭错误报告不建议用于实时网站,因为它可能会使很难识别和修复问题。>
> @运算符在PHP错误处理中的作用是什么?>
@ operator in php中的 @ operator用于抑制错误消息。当将PHP中的表达式添加到一个表达式中时,该表达式可能生成的任何错误消息都将被忽略。>
>如何在PHP中记录错误?
php提供error_log()函数以将错误消息发送到服务器的错误日志或指定文件。此功能可用于跟踪错误和调试。您还可以通过更改php.ini文件中的log_errors指令来配置php以记录所有错误。
以上是phpmaster | PHP中的错误处理的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

如何在系统重启后自动设置unixsocket的权限每次系统重启后,我们都需要执行以下命令来修改unixsocket的权限:sudo...
