浅析动态网页技术PHP中错误处理的一些方法_PHP教程
推荐:PHP函数:PHP的通用检测函数总结// ※CheckMoney(C_Money) 检查数据是否是99999.99格式 // ※CheckEmailAddr(C_mailaddr) 判断是否为有效邮件地址 // ※CheckWebAddr(C_weburl) 判断是否为有效网址 // ※CheckEmpty(C_char) 判断字符串是否为空 // ※CheckLengthBetween(C_char, I_len1, I_
已经玩php一段时间了,基本是from 0开始的,经常出现的问题也很多,慢慢的可以熟练的查询文档了,而且,经验也不是很多。
先look here。:
error_reporting(1048);//1,2,4,7,...,1048
ob_start();
session_start();
date_default_timezone_set('Asia/Shanghai');
php的递给调用会吃掉很多的内存。
一般的,不要太多的使用define。
在类的构造和属性器方面,5已经做了很多的工作,克服的bug就不说了,__系列的函数都有一些看点,也是支持static的。
按照我现在的写过的程序,很少用到框架页面的,我感觉在php里面速度不在是一个问题。
注意类的调用次序,特别是已经extends的,准确的释放掉内存。
这个注意使用乱用,MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH是一个enum吧。默认的是MYSQL_BOTH.
mysql的语句,如果执行in 的话不再支持limit。so...很麻烦。
支持distinct,group之,程序循环执行,md。
_GET= stripslashes_gpc(_GET);
_POST= stripslashes_gpc(_POST);
_COOKIE= stripslashes_gpc(_COOKIE);
}
set_magic_quotes_runtime(0);#magic_quotes_runtime
function stripslashes_gpc(array) {
while (list(key,value) = each(array)) {
if (is_string(value)) {
array[key] = addslashes(stripslashes(value));
} else if (is_array(value)) {
array[key] = stripslashes_gpc(value);
}
}
return array;
}
/**
* 处理程序中出现的错误
* @Date:2006-10-9-10:51
* @param (类型) (参数名) (描述)
*/
function Error_Handler(errno,errstr,errorfile,errline,errtext){
echo('系统发生错误:'.errstr);
echo('At'.errorfile.'的第'.errline.'行.');
if(errno==E_USER_ERROR){
echo('致命错误,程序已经中止');
}
}
在使用的时候:
trigger_error('call trigger_error',E_USER_ERROR);
这是使用函数获取的,当然您的错误报告级别应该高点:
为了更加oo,先看看一个描述类的自写的函数:
/**
* (功能描述)
* @Date:
* @param (类型) (参数名) (描述)
*/
function ClassDetail(classname){
if(!class_exists(classname)){
echo(classname.'类不存在');
}else{
print_r("以下描述类".classname);
print_r("所有的方法<pre>");
print_r(get_class_methods(classname));
print_r("</pre>");
print_r("<hr/>所有的属性<pre>");
print_r(get_class_vars(classname));
print_r("</pre><hr/>");
}
}
ClassDetail(classname);
发现exception类的所有get方法是:
[0] => __construct
[1] => getMessage
[2] => getCode
[3] => getFile
[4] => getLine
[5] => getTrace
[6] => getTraceAsString
[7] => __toString
慢慢的优化个性点,也可以的。
ok,来看比较oo的处理方式:
private _context = null;
function __construct(level, string, file, line, context=null){
parent::__construct(string,level);
this->file = file;
this->line = line;
this->_level = level;
this->_context = context;
}
function __destruct(){
// parent::__destruct();
}
function Message(){
errors = array(
E_ERROR => 'error',
E_WARNING => 'warning',
E_PARSE => 'parsing error',
E_NOTICE => 'notice',
E_CORE_ERROR => 'core error',
E_CORE_WARNING => 'core warning',
E_COMPILE_ERROR => 'compile error',
E_COMPILE_WARNING => 'compile warning',
E_USER_ERROR => 'user error',
E_USER_WARNING => 'user warning',
E_USER_NOTICE => 'user notice'
);
str = errors[parent::getCode()].': '.parent::getMessage().' 在 '.parent::getFile().
' 的第 '.parent::getLine()."行\n" ;
if(this->_level==E_USER_ERROR){
str .= ('<hr/>致命错误');
}
echo('<pre>');
echo(str);
echo('</pre>');
}
}
function error_handler(errno,errstr,errorfile,errline,errtext){
throw new ErrorHandlers(errno,errstr,errorfile,errline,errtext);
}
function exception_handler(Exception e)
{
errors = array(
E_ERROR => 'error',
E_WARNING => 'warning',
E_PARSE => 'parsing error',
E_NOTICE => 'notice',
E_CORE_ERROR => 'core error',
E_CORE_WARNING => 'core warning',
E_COMPILE_ERROR => 'compile error',
E_COMPILE_WARNING => 'compile warning',
E_USER_ERROR => 'user error',
E_USER_WARNING => 'user warning',
E_USER_NOTICE => 'user notice');
echo errors[e->getCode()].': '.e->getMessage().' in '.e->getFile().
' on line '.e->getLine()."\n";
echo e->getTraceAsString();
}
trigger_error('5do8');
try{
i = 1/0;
} catch(ErrorHandlers e) {
echo "发生错误."; //可以输出错误行
e->Message();
}
而后,注意了,如果您第一次(或者重新)加载的话,就加上:
set_exception_handler('exception_handler');
如果不是上述情况,就不要加了,否则会出现
因为error_handler是anto_flush的。
在一个exception里面不能调用其他的exception。有2条普遍适用的规则,如下:
2:不要在析构函数里面执行Exception.
restore_exception_handler();是可以保存exception柄的,注意,执行error以后就会有Exception的了。
最后,加上一个完整的例子:CallError.php
error_reporting(1048);
class ErrorHandlers extends Exception{
private _context = null;
function __construct(level, string, file, line, context=null){
parent::__construct(string,level);
this->file = file;
this->line = line;
this->_level = level;
this->_context = context;
}
function __destruct(){
// parent::__destruct();
}
function Message(){
errors = array(
E_ERROR => 'error',
E_WARNING => 'warning',
E_PARSE => 'parsing error',
E_NOTICE => 'notice',
E_CORE_ERROR => 'core error',
E_CORE_WARNING => 'core warning',
E_COMPILE_ERROR => 'compile error',
E_COMPILE_WARNING => 'compile warning',
E_USER_ERROR => 'user error',
E_USER_WARNING => 'user warning',
E_USER_NOTICE => 'user notice'
);
str = errors[parent::getCode()].': '.parent::getMessage().' 在 '.parent::getFile().
' 的第 '.parent::getLine()."行\n" ;
if(this->_level==E_USER_ERROR){
str .= ('<hr/>致命错误');
}
echo('<pre>');
echo(str);
echo('</pre>');
}
}
function error_handler(errno,errstr,errorfile,errline,errtext){
throw new ErrorHandlers(errno,errstr,errorfile,errline,errtext);
}
function exception_handler(Exception e)
{
errors = array(
E_ERROR => 'error',
E_WARNING => 'warning',
E_PARSE => 'parsing error',
E_NOTICE => 'notice',
E_CORE_ERROR => 'core error',
E_CORE_WARNING => 'core warning',
E_COMPILE_ERROR => 'compile error',
E_COMPILE_WARNING => 'compile warning',
E_USER_ERROR => 'user error',
E_USER_WARNING => 'user warning',
E_USER_NOTICE => 'user notice');
echo errors[e->getCode()].': '.e->getMessage().'在'.e->getFile().
'的第'.e->getLine()."行\n";
echo e->getMessage();
die();
}
//
set_error_handler('error_handler');
//restore_error_handler();
set_exception_handler('exception_handler');
//restore_exception_handler();
我肯定是错误
?>
执行结果:
另外,在类中,还可以这样:
{
trigger_error(" error: error_msg", error_type);
}
著名的Smarty就是这么做的.
分享:解读PHP中对文件和目录的操作方法一:引论 在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何
- 相关链接:
- 教程说明:
PHP教程-浅析动态网页技术PHP中错误处理的一些方法。