ThinkPHP有一个全局函数halt专门用来对错误进行格式化输出显示,可以在系统
函数库中找到它。通过这个函数,可以保证应用程序错误处理的一致性。
先把代码贴上来:
function halt($error) {
if (IS_CLI)
exit($error);
$e = array();
if (C('APP_DEBUG')) {
//调试模式下输出错误信息
if (!is_array($error)) {
$trace = debug_backtrace(); // 返回多维数组
$e['message'] = $error;
$e['file'] = $trace[0]['file'];
$e['class'] = $trace[0]['class'];
$e['function'] = $trace[0]['function'];
$e['line'] = $trace[0]['line'];
$traceInfo = '';
$time = date("y-m-d H:i:m", $_SERVER["REQUEST_TIME"]);
foreach ($trace as $t) {
$traceInfo .= '[' . $time . '] ' . $t['file'] . ' (' . $t['line'] . ') ';
$traceInfo .= $t['class'] . $t['type'] . $t['function'] . '(';
$traceInfo .= implode(', ', $t['args']);
$traceInfo .= ")<br/>";
}
$e['trace'] = $traceInfo;
} else {
$e = $error;
}
// 包含异常页面模板
include C('TMPL_EXCEPTION_FILE');
} else {
//否则定向到错误页面
$error_page = C('ERROR_PAGE');
if (!empty($error_page)) {
redirect($error_page); // 自定义错误页面
} else {
if (C('SHOW_ERROR_MSG'))
$e['message'] = is_array($error) ? $error['message'] : $error;
else
$e['message'] = C('ERROR_MESSAGE');
// 包含异常页面模板
include C('TMPL_EXCEPTION_FILE');
}
}
exit; // 发生错误时,退出程序
}
halt函数首先会检查PHP的SAPI(服务器端应用编程接口),如果为CLI方式,则直接退出程序。目前流行的方式是PHP作为一个模块被加载到Apache中,这个时候PHP的SAPI为apache2handler。ThinkPHP为方便应用程序的开发,提供了一套调试机制。当处于开发阶段时,可以开启调试机制,方便查错。而在部署环境阶段
时,则关闭调试机制,提高应用的效率和安全性。在这两种情况下,错误处理也是不同的。
当开启调试机制时,如果传递的错误数据信息不是以数组形式存储的,则将PHP内置回溯函数debug_backtrace处理的数据存储在一数组中,其中包括错误信息,文件名,类和函数等数据。如果传递的错误数据信息是以数组形式存储的,则为该数组建立索引即可。最后通过配置的异常页面模板格式化显示错误信息,默认异常页面模板放在框架模板目录下,关键内容贴在这里:
<div class="notice">
<h2>系统发生错误 </h2>
<div >您可以选择 [ <A HREF="<?php echo($_SERVER['PHP_SELF'])?>">重试</A> ] [ <A HREF="javascript:history.back()">返回</A> ] 或者 [ <A HREF="<?php echo(__APP__);?>">回到首页</A> ]</div>
<?php if(isset($e['file'])) {?>
<p><strong>错误位置:</strong> FILE: <span class="red"><?php echo $e['file'] ;?></span> LINE: <span class="red"><?php echo $e['line'];?></span></p>
<?php }?>
<p class="title">[ 错误信息 ]</p>
<p class="message"><?php echo $e['message'];?></p>
<?php if(isset($e['trace'])) {?>
<p class="title">[ TRACE ]</p>
<p id="trace">
<?php echo nl2br($e['trace']);?>
</p>
<?php }?>
</div>
当关闭调试机制时,也就是在生产环境中,可以自定义错误页面显示。如果系统找不到自定义错误显示模板,则会渲染上面的异常页面模板。
(完)
分享到:
相关推荐
二、ThinkPHP源码结构分析 2.1 源码目录结构:解压"thinkphp完整源码"后,可以看到包括Application、Conf、Controller、Model、View等主要目录,每个目录都有特定的功能和作用。 2.2 主要文件:如`index.php`作为...
8. **错误处理**:强大的异常处理和错误报告机制,帮助开发者快速定位并解决问题。 9. **安全性**:提供了防止SQL注入、XSS攻击等安全防护措施,确保应用的安全运行。 10. **命令行工具**:集成Console命令行工具...
9. **错误和异常处理**:框架内置了完善的错误和异常处理机制,可以自定义错误级别和异常处理器,提高系统的健壮性。 10. **命令行工具**:ThinkPHP6提供了命令行接口(CLI),可以用于执行各种任务,如生成模型、...
2. 错误处理:通过异常处理机制,优雅地处理程序运行中的错误,避免暴露系统信息。 3. 性能优化:使用缓存技术减少数据库查询次数,通过合理的数据库设计和索引优化提升查询速度。 五、总结 ThinkPHP框架源码交易...
4. 提供了全面的错误和异常处理机制,提高了系统的稳定性和可维护性。 5. 支持Composer管理,便于依赖库的安装和更新。 三、商城后台系统 商城后台管理系统是整个平台的核心,主要功能包括: 1. 商品管理:添加、...
3. 错误和日志管理:强大的错误处理和日志记录功能,便于调试和问题排查。 4. 数据库操作:ORM(对象关系映射)使得数据库操作更加直观,支持多种数据库类型。 四、资源网站源码分析 资源网站源码中包含了上述各个...
框架内建了完善的错误处理机制,可以捕获运行时的异常和错误,并提供日志记录功能,便于调试和问题排查。 九、AOP(面向切面编程) ThinkPHP 1.5引入了AOP概念,允许开发者在不修改原有代码的情况下,插入额外的...
通过设置全局异常处理器和错误处理器,可以统一处理运行时的异常和错误。同时,日志系统支持多种驱动,方便开发者记录和分析程序运行状态。 总的来说,这个压缩包提供的模板实例是学习和实践ThinkPHP5的好素材。...
6. **错误处理与日志**:ThinkPHP6.0增强了错误处理机制,提供了一致的异常处理,便于调试和问题定位。同时,其日志模块支持多种驱动,如文件、数据库、 syslog等,便于记录和分析运行时信息。 7. **安全防护**:...
它还支持自动路由、模型操作、数据库操作、缓存管理、错误处理、日志记录等功能,极大地提升了开发效率。 AmazeUI则为前端部分提供了丰富的组件和样式,如导航、表格、按钮、表单等,以及响应式的布局,确保网站在...
3. **错误处理和异常处理**:增强了错误报告和异常处理机制,方便开发者定位问题。 4. **注解支持**:使用注解可以简化代码,提高代码可读性。 5. **全局作用域**:移除了魔术方法,引入了全局作用域`app`,方便访问...
- **错误和异常处理**:熟悉PHP的错误报告机制,以及如何使用try-catch处理异常。 5. **源码分析**: - **阅读源码**:深入理解CMS系统的架构和设计模式,例如单例模式、工厂模式等。 - **安全实践**:查看源码...
《深入解析ThinkPHP5.0框架源码》 ThinkPHP5.0(简称TP5)是中国最流行的PHP框架之一,以其简洁、高效的特性受到广大开发者喜爱。本篇将围绕"thinkphp5-master"源码进行深入探讨,揭示其背后的运行机制和设计思想。...
3. 错误处理与日志记录:合理设置错误提示级别,记录异常信息,便于调试和问题排查。 4. 性能优化:通过缓存技术、数据库优化、减少不必要的数据库查询等方式提升系统性能。 五、部署与维护 1. 配置管理:通过...
5. **源码分析**: 开发者可以通过分析这个ThinkPHP商城的源码学习到如何设计和实现一个完整的电商系统,包括数据库设计、前后端交互、权限控制、支付接口集成等方面的知识。这对于提高PHP开发技能和理解电商系统架构...
8. **错误处理与日志记录**:ThinkPHP提供了错误处理机制和日志记录功能,可以帮助开发者定位问题和追踪系统运行状态。 9. **表单验证**:在添加和编辑员工信息的页面,通常会涉及表单验证,ThinkPHP的`validate`类...
3. 错误和日志:强大的错误处理和日志系统,有助于调试和问题定位。 4. 安全性:内置了防止SQL注入、XSS攻击的安全机制,保障系统的安全性。 五、部署与运行 完成开发后,需要将代码部署到服务器上。这包括配置...
1. MVC模式:ThinkPHP采用模型-视图-控制器(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,使代码更易于管理和维护。 2. 命名空间:源码中广泛使用命名空间,遵循PSR-4规范,便于类库的组织和加载。 3. 自动...
本文将深入探讨一个基于ThinkPHP5框架构建的医疗门诊挂号系统,分析其背后的开发语言、开发工具、数据库选择以及源码结构,为对医疗信息化感兴趣的开发者提供参考。 一、开发语言——ThinkPHP5 ThinkPHP5是PHP领域...
6. 异常处理:完善的异常处理机制,可以方便地捕获和处理程序运行中的错误。 四、文件结构分析 1. `.htaccess`:用于Apache服务器的重写规则配置,通常用于隐藏URL中的index.php,实现友好的URL。 2. `shuoming.ini...