首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你的PHP代码写错了!

- 错误处理及调试 -

Hypertext Preprocessor

一、错误处理概述

1

常见错误类型

1.语法错误

语法错误是指编写的代码不符合PHP的编写规范。语法错误最为常见,也最容易修复。

2.运行错误

运行错误一般不会阻止PHP脚本的运行,但会阻止脚本做希望它做的任何事情。

3.逻辑错误

逻辑错误不但不会阻止PHP脚本运行,还不会显示出错误信息。

4.环境错误

环境错误是由PHP开发环境配置的问题引起的代码报错。

2

错误级别

上述列表的中的E_ERROR、E_NWARNING、E_ALL等错误都是PHP解释器自动触发的。实际上,除了PHP解释器自动触发的错误外,还可以根据不同的要求自觉定义错误,他们可以用于协助调试,在发布给其他人的代码生成不推荐使用的通知等。PHP的内置函数trigger_error()来触发错误,函数的声明如下:

bool trigger_error(string $error_msg [, int $error_type=E_USER_NOTICE])

在使用trigger_error()函数触发错误之前,一定要先使用ini_set()函数让错误显示,否则使用trigger_error()函数无法触发错误。

二、如何处理错误

1

显示错误报告

1.修改配置文件

通过直接配置php.ini文件来实现错误报告,代码如下:

error_reporting(E_ALL & ~E_NOTICE);

display_errors=on;

2.error_reporting()和ini_set()函数

通过PHP语言提供的error_reporting()和ini_set()函数来实现显示错误报告,代码如下:

error_reporting(E_ALL & ~E_NOTICE);

ini_set('display_error',1);

3.die()函数

die()函数可以用来自定义输出错误信息,常用于业务逻辑的错误显示。

2

记录错误日志

1.修改配置文件

通过修改php.ini配置文件,可以直接设置记录错误日志的相关信息,具体代码如下:

error_reporting=E_ALL log_error=On error_log=/tmp/php_errors.log

2.error_log()函数

error_log()函数用于设置显示错误级别,E_ALL表示显示所有的错误,其函数声明如下:

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

上述声明中,$message表示要记录的错误信息。参数$message_type表示消息类型,该参数有两个值0或1,0表示发送到服务器地址,1表示使用mail()函数发送到指定邮件地址,$destination表示错误日志记录的位置,$extra_headers表示额外的头,当$message_type=1时才会使用。

3

自定义错误处理器

自定义错误处理器是通过set_error_handler()函数来实现的,其函数的声明如下:

mixed set_error_handler(callable $error_handler [, int $error_types=E_ALL | E_STRICT])

上述声明中,callable表示该参数$error_handler为回调函数类型。$error_handler是必须定义的参数,表示发生错误是运行的函数。$error_types用于指定处理错误的级别类型。其中,error_handler参数必须符合错误处理器函数的原型,原型如下:

function handler(int $errno, string $errstr [,string $errfile [, int $errline [, array $errcontext]]]);

上述代码中,参数$errno表示错误级别,$errstr表示错误说明,$errfile表示错误代码的文件名称,errline表示错误发生的代码行的行号,$errcontext表示在触发错误的范围内存在的所有变量的数组。其中前两个参数是必填参数。

三、异常处理

1

异常的概述与处理

在PHP5中加入了异常处理机制,它与错误的区别在于:异常定义了程序中遇到的非致命的错误。当程序遇到错误时,需要对异常进行捕获并进行处理。在PHP中可以通过throw关键字来抛出一个异常,如果要捕获和处理异常需要try...catch代码块来完成。

function checkNum($number){

if(Tnumber>1){

//抛出异常

throw new Exception("Balue must be I or below");

}

return true;

}

//可能触发异常的代码

try{

checkNum(2);

}

//抛出异常

catch(Exception $e){

echo 'Message:'.$e->getMessage();

}

2

自定义异常与多个catch模块

自定义异常只需要集成自Exception类,并添加自定义的成员属性和方法。一段脚本中可以使用多个异常,来检测多种情况。

class CustomException extends Exception{

public function errorMessage(){

//定义错误信息的显示格式

$errorMsg='Error on line'.$heis->getLine().'in'.$this->getFlie().':'.$this->getMessage().'is not a valid E-Mall adress';

return $errorMsg;

}

}

try{

//检查邮件地址是否合法

if(fliter_var($email, FILTER_VALIDATE_EMAIL)==FALSE){

//如果不合法抛出异常

throw new CustomException($email);

}

//检查邮件地址是否有字符串“example”

if(strpos($emil, "example")!==FALSE){

//如果存在则抛出异常

throw new Exception("$email is an example e-mail");

}

}

catch(CustomException $e){

//捕获我们自定义的错误类CustomException中抛出的邮件是否合法的异常信息

echo $e->errorMessage();

}

catch(Exception $e){

//捕获默认错误类Exception中抛出的邮件地址中是否有字符串“example”的异常信息

echo $e->getMessage();

}

定义了一个自定义异常类CustomException,在try代码中根据用户输入的地址格式不同,会引发不同的异常,在代码中有两个catch块,分别用来捕获CustomException和Exception异常并处理。设置顶层异常处理器用于没有用try/catch块来捕获的异常,该函数声明如下:

callable set_exception_handler(callable $exception_handler)

该函数只有一个参数$exception_handler表示异常处理函数,该异常处理函数需要在被调用前定义。

四、PHP的调试技术

1

使用输出函数进行调试

1.print()函数用于输出字符串,语法格式如下:

int print(string $arg)

2.echo()函数用于输出一个或多个字符串,语法格式如下:

void echo(string $arg1 [, string $...])

3.print_r()函数用于打印一个变量易于理解的信息,语法格式如下:

bool print_r(mixed $exprission [, bool $return])

4.var_dump()函数用于打印变量的相关信息,语法格式如下:

void var_dump(mixed $expression [, mixed $expression [, $...]])

2

使用文件记录进行调试

file_put_contents()函数可以将程序的相关信息记录到某个文件中。这样程序中出现过的错误或是警告就会保存在文件中,以便以后进行信息的追溯。函数的声明如下:

int file_put_contents(string $filename, mixed $data [, int $flags=0 [, resource $context]])

其中file_put_contents()函数有3个参数,其中第一个参数$filename表示要被写入的文件名,第二个参数$data表示要写入的数据。第三个参数表示附件选项。

3

使用Xdebug进行调试

Xdebug工具是一个开放源代码的PHP程序调试器,用来调试和分析程序的运行状况。

1.首先下载Xdebug相应的版本,将下载好的安装文件php_xdebug-2.2.3-5.3-vc9.dll放到PHP的ext目录中,然后在php.ini文件中添加几行配置信息,具体如下:

[Xdebug]

zend_extension="C:\lamp\php5\ext\php_xdebug-2.2.3-5.3-vc9.dll"

xdebug.remote_enable=true

xdebug.remote_handler=dbgp

xdebug.remote_host=localhost

xdebug.remote_port=9000

上述信息配置完成后,需要重启Apache服务器使配置文件php.ini生效。

2.Xdebug的使用。首先创建一个出错的程序,该程序包含一个不存在的文件,具体如下:

testXdebug();

function testXdebug(){

reguireFile();

}

function requireFile(){

require_once('abc.php');

}

打开IE浏览器,访问该文件,会发现错误信息变成了彩色,并且定位了出错的函数testXdebug(),因此Xdebug工具可以追踪代码出错的具体位置,并且有迅速定位快速排错的功能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G1413L00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券