PHP的错误和异常处理

设置环境变量常见的地方为区分开发环境/生产环境,或者定义一些数据库的帐号密码

PHP程序的错误发生一般归属于下列三个领域。

设置Apache环境变量

 语法错误

指令

设置当前环境变量为DEV

SetEnv RUNTIME_ENVIROMENT DEV

数据库帐号密码

SetEnv MYSQL_USERNAME root
SetEnv MYSQL_PASSWORD root

语法错误最常见,并且最容易修复。例如,遗漏了一个分号,就会显示错误信息。这类错误会阻止脚本执行。通常发生在程序开发时,可以通过错误报告进行修复,再重新运行。

配置文件格式

<VirtualHost *:80>
    ServerAdmin admin@admin.com
    DocumentRoot "/var/www/"
    ServerName localhost
    SetEnv RUNTIME_ENVIROMENT DEV
    SetEnv MYSQL_USERNAME root
    SetEnv MYSQL_PASSWORD root
    ErrorLog "logs/error.log"
    CustomLog "logs/access.log" common
</VirtualHost>

Ø  运行时错误

设置Nginx环境变量

这种错误一般不会阻止PHP脚本的运行,但是会阻止脚本做希望它所做的任何事情。例如,在调用header()函数前如果有字符输出,PHP通常会显示一条错误消息,虽然PHP脚本继续运行,但header()函数并没有执行成功。

指令

设置当前环境变量为DEV

fastcgi_param RUNTIME_ENVIROMENT 'DEV'

数据库帐号密码

fastcgi_param MYSQL_USERNAME 'root'
fastcgi_param MYSQL_PASSWORD 'root'

Ø  逻辑错误

配置文件格式

在fastcgi_params文件中配置

fastcgi_param RUNTIME_ENVIROMENT 'DEV';
fastcgi_param MYSQL_USERNAME 'root';
fastcgi_param MYSQL_PASSWORD 'root';

在nginx.conf中配置

server {
    listen   80; 
    root /var/www;
    index index.php;
    server_name localhost;
    location /
    {   
         index index.php;
    }   

    location ~ .*.(php|php5)?$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }   
}

这种错误实际上是最麻烦的,不但不会阻止PHP脚本的执行,也不会显示出错误消息。例如,在if语句中判断两个变量的值是否相等,如果错把比较运行符号“==”写成赋值运行符号“=”就是一种逻辑错误,很难会被发现。

为PHP脚本设置环境变量

一个异常则是在一个程序执行过程中出现的一个例外,或是一个事件,它中断了正常指令的运行,跳转到其他程序模块继续执行。所以异常处理经常被当做程序的控制流程使用。无论是错误还是异常,应用程序都必须能够以妥善的方式处理,并做出相应的反应,希望不要丢失数据或者导致程序崩溃。

为当前用户临时设置

临时设置只需要执行

export KEY=VALUE

1.错误的类型

为当前用户永久设置

~/.bashrc(不同系统各有不同)中写

运行PHP脚本时,PHP解析器会尽其所能地报告它遇到的问题。在PHP中错误报告的处理行为,都是通过PHP的配置文件php.ini中有关的配置指令确定的。另外PHP的错误报告有很多种级别,可以根据不同的错误报告级别提供对应的调试方法。一旦把PHP设置成呈现出发生了哪些错误,你可能想调整错误报告的级别。

为所有用户(不包括root)设置

创建文件/etc/profile.d/test.sh,写入

KEY=VALUE

级别常量

错误报告描述

E_ERROR 

致命的运行时错误(它会阻止脚本的执行)

E_WARNING 

运行时警告(非致命的错误)

E_PARSE 

从语法中解析错误

E_NOTICE 

运行时注意消息(可能是或者可能不是一个问题)

E_CORE_ERROR 

类似E_ERROR,但不包括PHP核心造成的错误

E_CORE_WARNING 

类似E_WARNING,但不包括PHP核心错误警告

E_COMPILE_ERROR 

致命的编译时错误

E_COMPILE_WARNING 

致命的编译时警告

E_USER_ERROR 

用户导致的错误消息

E_USER_WARNING 

用户导致的警告

E_USER_NOTICE 

用户导致的注意消息

E_ALL 

所有的错误、警告和注意

E_STRICT

关于PHP版本移植的兼容性和互操作性建议

为所有用户(包括root)设置

/etc/environment中写入

KEY=VALUE

注意,这个文件的生效时间是用户登录时,所以对于root来说,需要重启机器

如果用户希望在PHP脚本中,遇到上表中的某个级别的错误时,将错误消息报告给用户。则必须在配置文件php.ini中,将display_errors指令的值设置为On,开启PHP输出错误报告的功能。也可以在PHP脚本中调用ini_set()函数,动态设置配置文件php.ini中的某个指令。如果display_errors被启用,就会显示满足已设置的错误级别的所有错误。当用户在访问时,看到显示的这些消息不仅会感到迷惑,而且还可能会过多地泄露有关服务器的信息,使服务器变得很不安全。所以在项目开发或测试期间启用此指令,可以根据不同的错误报告更好的调试程序。出于安全性和美感的目的,让公众用户查看PHP的详细出错消息一般是不明智的,所以在网站投入使用时要将其禁用。

在Supervisor中设置

有的时候PHP脚本是用Supervisor来控制的,所以记得设置supervisor配置中的environment项

2.显示错误报告的级别

在PHP中调用服务器环境变量

在PHP中有两个调用方式:

$env = getenv('RUNTIME_ENVIROMENT');

澳门新葡亰娱乐在线,还有超全局变量方式:

$env = $_SERVER['RUNTIME_ENVIROMENT'];

Ø  可以通过在配置文件php.ini中,修改配置指令error_reporting的值,修改成功后重新启动Web服务器,则每个PHP脚本都可以按调整后的错误级别输出错误报告。下面是修改php.ini配置文件的示例,列出几种为error_reporting指令设置不同级别值的方式,可以把位运算符[&(与)、|(或)、~(非)]和错误级别常量一起使用。如下所示:

; 可以抛出任何非注意的错误,默认值

error_reporting = E_ALL & ~E_NOTICE

; 只考虑致命的运行时错误、解析错误和核心错误

; error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR

; 报告除用户导致的错误之外的所有错误

; error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)

Ø  或者可以在PHP脚本中使用error_reporting()函数,基于各个脚本来调整这种行为。这个函数用于确定PHP应该在特定的页面内报告哪些类型的错误。该函数获取一个数字或上表中错误级别常量作为参数。如下所示:

<DIV align=center>

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图