Welcome 微信登录

首页 / 网页编程 / PHP / PHP错误处理

PHP错误处理2017-01-03 本站 guaitu程序如果没有错误处理机制会怎样?有时可能会出现问题。

例:比较健壮的程序写法:

<?php
if(!file_exists("aa.txt")){
echo "文件不存在";
exit();
}else{
$fp=fopen("aa.txt","r");
echo "文件打开成功";
fclose($fp);
}
?>
php处理错误的方式

1、简单的“die()”语句。

die()功能相当于exit()

<?php
/*if(!file_exists("aa.txt")){
die("文件不存在");
}else{
$fp=fopen("aa.txt","r");
echo "文件打开成功";
fclose($fp);
}*/
//下面的代码与上面多行注释中的代码功能相同,不过更加简洁
file_exists("aa.txt") or die("文件不存在"); //如果函数为真,程序继续执行,否则执行die()
$fp=fopen("aa.txt","r");
echo "文件打开成功";
fclose($fp);
?>
2、自定义错误(错误处理器)和错误触发器

该函数必须有能力处理至少两个参数(error level和error message),但是可以接受最多五个参数(可选的:file,line-number以及error context):

基本语法:

error_function(error_level,error_message,error_file,error_line,error_context);

php的错误级别

例:

<?php
//自定义错误处理函数
function my_error($errno,$errmes){
echo "<font size="5" color="red">$errno</font><br />";
echo "错误信息是:$errmes";
exit();
}
//改定set_error_handler处理器
set_error_handler("my_error",E_WARNING); //指定WARNING级别的错误调用自定义的错误函数
$fp=fopen("bb.txt","r");
?>
php的错误触发器:用于处理逻辑错误

例:有一段代码,接收一个年龄,如果输入的年龄>=120,认为是一个错误。

//传统方法

if($age>=120){
echo "年龄太大";
exit();
}

<?php
//自定义错误处理器
function my_error3($errno,$errmes){
echo "错误号是:".$errno;
}
//指定E_WARNING级别的错误处理函数
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//调用触发器,同时指定错误级别
trigger_error("输入的年龄过大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
例:自定义一个错误处理函数,要求当打开一个文件不存在时,自动调用该函数,并记录错误信息,要求记录错误号,错误信息和发生时间。

3、php错误日志

默认根据php.ini中的error_log配置,通过使用error_log()函数,可以向指定的文件或远程目的地发送错误记录。

语法:

bool error_log(string $message [,int $message_type=0[,string $destination[,string $extra_headers]]])

例:

<?php
//自定义错误处理器
function my_error3($errno,$errmes){
$err_info="错误号是:".$errno."--".$errmes;
//把错误信息保存
//表示向文件输出一个回车换行
error_log($err_info." ",3,"myerr.txt");
}
//指定E_WARNING级别的错误处理函数
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//调用触发器,同时指定错误级别
trigger_error("输入的年龄过大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
现在要把时间也保存下来:

php设置时区

<?php
echo time()."<br />";
//输出当前日期和时间
//默认是UTC,和中国相差8小时,设置时区方法:
//1、页面设置 2、在php.ini设置
date_default_timezone_set("PRC");//设置为 中国时区
echo "<br />";
echo date("Y-m-d G-i-s")
?>
改定上例,让日志中也能记录时间

<?php
//自定义错误处理器
function my_error3($errno,$errmes){
$err_info="错误号是:".$errno."--".$errmes;
//把错误信息保存
//表示向文件输出一个回车换行
date_default_timezone_set("PRC");//设置为 中国时区
error_log("时间是".date("Y-m-d G-i-s").$err_info." ",3,"myerr.txt");
}
//指定E_WARNING级别的错误处理函数
set_error_handler("my_error3",E_USER_WARNING);
$age=300;
if($age>120){
//调用触发器,同时指定错误级别
trigger_error("输入的年龄过大",E_USER_WARNING);
//exit();
}
echo "OK";
?>
URL: http://www.bianceng.cn/webkf/PHP/201701/50504.htm