首页 > 后端开发 > 正文

php异常处理框架 70PHP错误处理方式:错误735的处理方法

2023-09-11 14:14:34 | 我爱编程网

在平时的学习生活当中,对于后端开发一定都很关心,今天我爱编程网小编为大家整理了php异常处理框架 70PHP错误处理方式:错误735的处理方法,希望能够帮助到大家。

php异常处理框架 70PHP错误处理方式:错误735的处理方法

国外主流PHP框架对比评测

最近简单的使用了目前在国内用的比较多的几个主流国外PHP框架(不包括国内框架) 大致对这些框架有个直观上的感受 简单分享一下 对于哪些做框架选型的时候 权当一个参考

主要参考的框架包括 CodeIgniter CakePHP ZendFramework Symfony 我对很多框架也没有认真使用 只是简单试用了一下 可能很多看法不成熟或者是错误的 请大家指正 一起成长

CodeIgniter

优点

配置简单 全部的配置使用PHP脚本来配置 执行效率高 具有基本的路由功能 能够进行一定程度的路由 具有初步的Layout功能 能够制作一定程度的界面外观 数据库层封装的不错 具有基本的MVC功能

快速简洁 代码不多 执行性能高 框架简单 容易上手 学习成本低 文档详细 自带了很多简单好用的library 框架适合小型应用

缺点

把Model层简单的理解为数据库操作

框架略显简单 只能够满足小型应用 略微不太能够满足中型应用需要

评价

总体来说 拿CodeIgniter来完成简单快速的应用还是值得 同时能够构造一定程度的layout 便于模板的复用 数据操作层来说封装的不错 并且CodeIgniter没有使用很多太复杂的设计模式 执行性能和代码可读性上都不错 至于附加的 library 也还不错 简洁高效

CakePHP

优点

CakePHP是最类似于RoR的框架 包括设计方式 数据库操作的Active Record方式 设计层面很优雅 没有自带多余的 library 所有的功能都是纯粹的框架 执行效率还不错 数据库层的 hasOne hasMany 功能很强大 对于复杂业务处理比较合适 路由功能 配置功能还不错 自动构建脚手架(scaffold)很强大 适合中型应用 基本实现过了MVC每一层 具有自动操作命令行脚本功能

文档比较全 在国内推广的比较成功 大部分都知道CakePHP 学习成本中等

缺点

CakePHP非常严重的问题是把Model理解为数据库层操作 严重影响了除了数据库之外的操作能力

CakePHP的cache功能略显薄弱 配置功能稍嫌弱 CakePHP不适合大型应用 只适合中型应用 小型应用来说略微的学习成本高了点

评价 我爱编程网

总体来说CakePHP框架代表了PHP框架很重要的一个时代和代表 并且目前发挥着很重要的作用 不少自己写的框架都模仿了CakePHP的方式 是个里程碑式的产品 CakePHP透露著RoR的敏捷开发方式和把数据库操作认为是唯一Model的设计思想 作为开发快速应用和原型是绝好的工具 同样 用来做Web 网站的开发框架 也是值得选择的

Zend Framework

优点

官方出品 自带了非常多的 library 框架本身使用了很多设计模式来编写 架构上很优雅 执行效率中等 MVC设计中 比较简洁 具有路由功能 配置文件比较强大(能够处理XML和php INI) 各种 library 很强大 是所有PHP框架中各种功能最全面的 包括它不仅是一个框架 更是一个大类库(取代PEAR) 这是它的主要特色 能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强) 并且能够很轻易的使用Loader功能加载其他新增加的Class Cache功能很强大 从前端Cache到后端Cache都支持 后端Cache支持Memcache APC SQLite 文件等等方式 数据库操作功能很强大 支持各种驱动(适配器)

文档很全 在国内社区很成熟 并且目前不少Web 网站在使用 学习成本中等

缺点

MVC功能完成比较弱 View层简单实现(跟没实现一样) 无法很强大的控制前端页面

没有自动化脚本 创建一个应用 包括入口文件 全部必须自己手工构建 入门成本高

Zend Framework 作为一个中型应用框架问题不大 也能够勉强作为大型应用的框架 但是作为一个很成熟的大型PHP框架来说 还需要一些努力

评价

作为官方出品的框架 Zend Framework的野心是可以预见的 想把其他框架挤走 同时封装很多强大的类库 能够提供一站式的框架服务 并且他们的开发团队很强大 完全足够有能力开发很强大的产品出来 所以基本可以确定的是Zend Framework前途无量 如果花费更多的时间去完善框架 同样的 Zend Framework架构本身也是比较优雅的 说明Zend官方是有很多高手的 设计理念上比较先进 虽然有一些功能实现的不够完善 比如View层 自动化脚本等等 这些都有赖于未来的升级 总体来说Zend Framework是最值得期待的框架 当然 你目前要投入你的项目中使用也是完全没问题的

Symfony

优点

Symfony 是我了解的PHP框架中功能最强大的 而且我使用时间比较长 但是很多功能还是没有挖掘出来 它完整实现了MVC三层 封装了所有东西 包括 $_POST $_GET 数据 异常处理 调试功能 数据检测 包含强大的缓存功能 自动加载Class(这个功能很爽) 强大的i n国家化支持 具有很强大的view层操作 能够零碎的包含单个多个文件 非常强大的配置功能 使用yml配置能够控制所有框架和程序运行行为 强大到让人无语 能够很随意的定义各种自己的class 并且symfony能够自动加载(auto load)这些class 能够在程序中随意调用 包含强大的多层级项目和应用管理 Project > Application > Module > Action 能够满足一个项目下多个应用的需要 并且每层可以定义自己的类库 配置文件 layout 非常强大的命令行操作功能 包括建立项目 建立应用 建立模块 刷新缓存等等

Symfony绝对是开发大型复杂项目的首选 因为使用了Symfony 将大大节约开发成本 并且多人协作的时候 不会出现问题 在Project级别定义好基础Class以后 任何模块都能够重用 大大复用代码

缺点

数据库操作model采用了重量级的propel和creole 不过在我测试的版本中已经把他们移到了addon里 可用可不用

缓存功能无法控制 每次开发调试总是缓存 需要执行 symfony cc symfony rc 来清除和重建缓存

效率不是很高 特别是解析模板和读取配置文件的过程 花费时间不少

学习成本很高 并且国内没有成熟的社区和文档 连中文手册都没有 相应的要掌握所有功能 需要花费比较多的时间

评价

Symfony绝对是企业级的框架 唯一能够貌似能够跟Java领域哪些强悍框架抗衡的东西 强悍的东西 自然学习复杂 但是相应的对项目开发也比较有帮助 自然是推荐复杂的项目使用Symfony来处理 觉得是值得 后期的维护成本比较低 复用性很强 相应的如果使用Symfony的应该都是比较复杂的互联网项目 那么相应的就要考虑关于数据库分布的问题 那么就需要抛弃Symfony自带的数据库操作层 需要自己定义 当然了 Symfony支持随意的构造model层

总结

以上数款框架 各有特色 而且都是开源项目 不过框架针对的项目不一样 一般来说 CodeIngiter 比较适合小型项目 CakePHP 和 Zend Framework 比较适合中型项目 Symfony 比较适合大型重量级项目 在项目选型的时候 要充分考虑框架的可以定制性 扩展性 因为每个项目都无法确定你是否会随着需求的变化进行改变

相对来说 Zend Framework 和 Symfony 应对变化的能力比较强 特别是能够随意定制 model 层的Class 能够非常方便增加自己业务或者数据处理类 我是个人比较推荐在中大型项目中使用的框架

CodeIngiter 和 CakePHP 在中小型项目中同样能够发挥重大作用 快速开发和原型构建 非常适合目标不清晰的原型项目的开发

当然了 也许 自己写一个框架更适合

lishixinzhi/Article/program/PHP/201311/21441

php异常处理框架 70PHP错误处理方式:错误735的处理方法

70PHP错误处理方式:错误735的处理方法

PHP错误处理方式

1.1 知识能力

php程序的错误(Errors)是指程序执行前解析(Parse)过程的错误,或解析(Parse)后执行程序时产生的错误,主要分为两种:

 环境错误(Environmental Errors):环境错误也称为外部错误(External Errors),这是指程序执行环境所导致的错误,并不是程序设计的问题。例如:没有权限无法写入档案,或档案不存在。

 程序错误(Programming Errors):程序错误是程序中的问题(Bugs),可能是语法错误(Syntax Errors)、语义错误或程序逻辑错误(Logical Errors)。 错误处理(Error Handling)是一种处理错误的机制,可以处理解析过程的语法和语义错误,或执行时的环境错误和程序错误中的逻辑错误。

PHP根据错误的严重程度,将错误分成不同的分类,包括:

 Parse Errors:剖析错误是指PHP程序代码的语法和语义错误,这是执行前,解析过程产生的错误。

 Fatal Errors:致命错误是很严重的执行时错误,它会导致PHP程序代码终止执行。

 Warnings:警告错误是一种尚能补救且非致命的执行时错误,PHP引擎会试图继续执行PHP程序代码。

 Notices:注意错误是一种小且非致命的错误,只是用来提醒程序代码可能出现的错误。例如:没有初始化变量。

每个分类又根据情况分成不同的等级(level),程序中可以根据需要,只报告特定等级的错误,例如,通常会把Notices等级的错误对用户屏蔽掉。

PHP的处理方式,包括以下几种手段:

 基本的错误处理方式有:

 不理会

 终止程序显示错误讯息

 写入日志文件

 使用自定义错误处理进行补救

PHP程序最简单的错误处理就是使用exit()或die()终止程序执行并显示一段错误信息。

exit()与die()并不是真正的函数,它是PHP的语言结构(Language Construct),例如:使用PHP的fopen()函数打开文件,如下所示:

$fp = fopen($filename,

这样,当打开文件发生错误的时候,将会打印一个错误信息,并且终止程序的执行。

1.2 职业素质 如果程序的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。PHP错误处理有几个好处,在开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试;在运行阶段:程序不会输出任何一种错误报告,以免用户看到。

1.3 开发流程

实例:文件错误。

第一步:定义文件变两个;

$filename =

第二步:打开文件,并进行错误处理。 $fp = fopen($filename, "r")

or exit(

1.4 项目拓展

PHP除了提供了错误处理方式以外,还提供了异常处理方式。同其他语言一样,PHP提供了异常处理机制,且机制与其他语言非常相似,有兴趣的读者可以自行开发比较。

php异常处理框架 70PHP错误处理方式:错误735的处理方法

php拦截异常怎么写


php拦截异常可以通过PHP的错误、异常机制及其内建数'set_exception_handler'、'set_error_handler'、'register_shutdown_function' 来写。

'set_exception_handler' 函数 用于拦截各种未捕获的异常,然后将这些交给用户自定义的方式进行处理

'set_error_handler' 函数可以拦截各种错误,然后交给用户自定义的方式进行处理 (推荐学习:PHP视频教程)
'register_shutdown_function' 函数是在PHP脚本结束时调用的函数,配合'error_get_last'可以获取最后的致命性错误

这个思路大体就是把错误、异常、致命性错误拦截下来,交给我们自定义的方法进行处理,我们辨别这些错误、异常是否致命,如果是则记录的数据库或者文件系统,然后使用脚本不停的扫描这些日志,发现严重错误立即发送邮件或发送短信进行报警

首先我们定义错误拦截类,该类用于将错误、异常拦截下来,用我们自己定义的处理方式进行处理,该类放在文件名为'errorHandler.class.php'中,代码如下
/**
* 文件名称:baseErrorHandler.class.php
* 摘 要:错误拦截器父类
*/
require 'errorHandlerException.class.php';//异常类
class errorHandler
{
public $argvs = array();
public $memoryReserveSize = 262144;//备用内存大小
private $_memoryReserve;//备用内存
/**
* 方 法:注册自定义错误、异常拦截器
* 参 数:void
* 返 回:void
*/
public function register()
{
ini_set('display_errors', 0);
set_exception_handler(array($this, 'handleException'));//截获未捕获的异常
set_error_handler(array($this, 'handleError'));//截获各种错误 此处切不可掉换位置
//留下备用内存 供后面拦截致命错误使用
$this->memoryReserveSize > 0 && $this->_memoryReserve = str_repeat('x', $this->memoryReserveSize);
register_shutdown_function(array($this, 'handleFatalError'));//截获致命性错误
}
/**
* 方 法:取消自定义错误、异常拦截器
* 参 数:void
* 返 回:void
*/
public function unregister()
{
restore_error_handler();
restore_exception_handler();
}
/**
* 方 法:处理截获的未捕获的异常
* 参 数:Exception $exception
* 返 回:void
*/
public function handleException($exception)
{
$this->unregister();
try
{
$this->logException($exception);
exit(1);
}
catch(Exception $e)
{
exit(1);
}
}
/**
* 方 法:处理截获的错误
* 参 数:int $code 错误代码
* 参 数:string $message 错误信息
* 参 数:string $file 错误文件
* 参 数:int $line 错误的行数
* 返 回:boolean
*/
public function handleError($code, $message, $file, $line)
{
//该处思想是将错误变成异常抛出 统一交给异常处理函数进行处理
if((error_reporting() & $code) && !in_array($code, array(E_NOTICE, E_WARNING, E_USER_NOTICE, E_USER_WARNING, E_DEPRECATED)))
{//此处只记录严重的错误 对于各种WARNING NOTICE不作处理
$exception = new errorHandlerException($message, $code, $code, $file, $line);
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
array_shift($trace);//trace的第一个元素为当前对象 移除
foreach($trace as $frame)
{
if($frame['function'] == '__toString')
{//如果错误出现在 __toString 方法中 不抛出任何异常
$this->handleException($exception);
exit(1);
}
}
throw $exception;
}
return false;
}
/**
* 方 法:截获致命性错误
* 参 数:void
* 返 回:void
*/
public function handleFatalError()
{
unset($this->_memoryReserve);//释放内存供下面处理程序使用
$error = error_get_last();//最后一条错误信息
if(errorHandlerException::isFatalError($error))
{//如果是致命错误进行处理
$exception = new errorHandlerException($error['message'], $error['type'], $error['type'], $error['file'], $error['line']);
$this->logException($exception);
exit(1);
}
}
/**
* 方 法:获取服务器IP
* 参 数:void
* 返 回:string
*/
final public function getServerIp()
{
$serverIp = '';
if(isset($_SERVER['SERVER_ADDR']))
{
$serverIp = $_SERVER['SERVER_ADDR'];
}
elseif(isset($_SERVER['LOCAL_ADDR']))
{
$serverIp = $_SERVER['LOCAL_ADDR'];
}
elseif(isset($_SERVER['HOSTNAME']))
{
$serverIp = gethostbyname($_SERVER['HOSTNAME']);
}
else
{
$serverIp = getenv('SERVER_ADDR');
}
return $serverIp;
}
/**
* 方 法:获取当前URI信息
* 参 数:void
* 返 回:string $url
*/
public function getCurrentUri()
{
$uri = '';
if($_SERVER ["REMOTE_ADDR"])
{//浏览器浏览模式
$uri = '' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
}
else
{//命令行模式
$params = $this->argvs;
$uri = $params[0];
array_shift($params);
for($i = 0, $len = count($params); $i < $len; $i++)
{
$uri .= ' ' . $params[$i];
}
}
return $uri;
}
/**
* 方 法:记录异常信息
* 参 数:errorHandlerException $e 错误异常
* 返 回:boolean 是否保存成功
*/
final public function logException($e)
{
$error = array(
'add_time' => time(),
'title' => errorHandlerException::getName($e->getCode()),//这里获取用户友好型名称
'message' => array(),
'server_ip' => $this->getServerIp(),
'code' => errorHandlerException::getLocalCode($e->getCode()),//这里为各种错误定义一个编号以便查找
'file' => $e->getFile(),
'line' => $e->getLine(),
'url' => $this->getCurrentUri(),
);
do
{
//$e->getFile() . ':' . $e->getLine() . ' ' . $e->getMessage() . '(' . $e->getCode() . ')'
$message = (string)$e;
$error['message'][] = $message;
} while($e = $e->getPrevious());
$error['message'] = implode("
", $error['message']);
$this->logError($error);
}
/**
* 方 法:记录异常信息
* 参 数:array $error = array(
* 'time' => int,
* 'title' => 'string',
* 'message' => 'string',
* 'code' => int,
* 'server_ip' => 'string'
* 'file' => 'string',
* 'line' => int,
* 'url' => 'string',
* );
* 返 回:boolean 是否保存成功
*/
public function logError($error)
{
/*这里去实现如何将错误信息记录到日志*/
}
}上述代码中,有个'errorHandlerException'类,该类放在文件'errorHandlerException.class.php'中,该类用于将错误转换为异常,以便记录错误发生的文件、行号、错误代码、错误信息等信息,同时其方法'isFatalError'用于辨别该错误是否是致命性错误。

以上就是关于php异常处理框架 70PHP错误处理方式:错误735的处理方法的全部内容了,如果需要了解更多相关资讯敬请关注我爱编程网。
与“php异常处理框架 70PHP错误处理方式:错误735的处理方法”相关推荐
php框架统一异常处理 70PHP错误处理方式:错误735的处理方法
php框架统一异常处理 70PHP错误处理方式:错误735的处理方法

PHP异常处理的一些问题在java、python等语言中,异常对于我们来说已经是必不可少的错误处理方式。异常处理是面向对象编程中的一种很强大的特性,然而很多PHPer对它不了解,甚至认为它会破坏代码结构。即使在很多开源项目中,也难以见到异常的踪影。那么,PHP中的异常,到底有没有意义呢?PHP有两种错误处理机制,一种是内置错误,一种是异常。内置错误,包含error、warning

2023-09-25 20:05:12
错误处理php框架 php中的错误类型有哪些
错误处理php框架 php中的错误类型有哪些

ThinkPhp框架中使用mongodb数据库配置报错CalltoamemberfunctionselectCollection()onanon-objectTP3.1的解决方法就是如楼上所说,需要实例化mong数据库的模型。so有两种方式:直接在使用的方法内实例化MongoModel类;写一个model专门继承MongoModel,把需要连mongo的操作或方法

2023-09-17 01:12:23
PHP框架异常处理 用实例分析PHP5异常处理
PHP框架异常处理 用实例分析PHP5异常处理

用实例分析PHP5异常处理<?php/***■一PHP5的异常处理**PHP5添加了类似于其它语言的异常处理模块。在PHP代码中所产生的异常可被throw*语句抛出并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,以*便捕获可能存在的异常。每一个try至少要有一个与之对应的catch。使用多个catch*可以捕获不同的类所产生的异常。当tr

2023-09-11 21:19:51
php错误框架怎么处理 如何为PHP项目统一设置404页面
php错误框架怎么处理 如何为PHP项目统一设置404页面

PHP中处理异常有几种方式?请详述php中异常处理方法总结:当异常被触发时,通常会发生:在PHP5中添加了类似于其它语言的错误异常处理模块。在PHP代码中所产生的异常可被throw语句抛出并被catch语句捕获。需要进行异常处理的代码都必须放入try代码块内,以便捕获可能存在的异常。每一个try至少要有一个与之对应的catch。使用多个catch可以捕获不同的类所产生的异常。当try

2023-09-15 23:07:12
php查框架错误的方法 php如何提示错误信息
php查框架错误的方法 php如何提示错误信息

php怎样获取mysql错误信息php获取mysql错误信息的方法:可以利用mysql_error()函数来获取。mysql_error()函数可以返回上一个mysql操作产生的文本错误信息,如果没有错误则返回空字符串。mysql_error()函数返回上一个MySQL操作产生的文本错误信息,如果没有出错则返回空字符串。(推荐教程:php图文教程)语法:mysql_erro

2023-10-03 21:33:52
php数据处理框架 php框架搭建方法?
php数据处理框架 php框架搭建方法?

php对数据进行数据处理?PHP是一种常用的编程语言,可以用来对数据进行处理和操作。以下是一些常见的PHP数据处理方法:数组操作:PHP中可以使用数组来存储和处理数据。可以使用数组函数来对数组进行操作,例如增加、删除、查找、排序等。例如,可以使用以下代码将一个数组按照某个键值进行排序:php复制$arr=array(array('name'=&gt;'Alic

2023-09-23 04:55:48
php框架打开出现运行信息 php显示错误信息方法 php显示错误信息的方法
php框架打开出现运行信息 php显示错误信息方法 php显示错误信息的方法

php运行出现这个求解决解决办法:需要有自己的MYSQL数据库服务器。下载的网站里应该有数据库文件,然后导入你的数据库服务器里,在修改你的数据库文件地址,用户名,密码,还有数据库名。查看下是不是使用了post或者未传ip参数。win7下运行32位的程序没有问题,一直以为是64位的。php显示错误信息方法php显示错误信息的方法我们在

2023-10-04 05:44:39
php框架中处理异常 php拦截异常怎么写
php框架中处理异常 php拦截异常怎么写

php拦截异常怎么写php拦截异常可以通过PHP的错误、异常机制及其内建数'set_exception_handler'、'set_error_handler'、'register_shutdown_function'来写。'set_exception_handler'函数用于拦截各种未捕获的异常,然后将这些交给用户自定义的方式进行处理'set_error_handler'函数

2023-09-17 17:12:45