php 忽略错误符号@ or die()用法范例及注意事项

在php程序运行时,如果某语句出现错误,则会在网页上显示错误信息,但是有时候,我们并不希望显示这个错误信息,而是忽略它,取而代之的是显示其他提示信息。这就需要用到@ or die()这个语法了。不过在使用这个语法之前,我们需要弄明白一些事情,因为有时候使用它你会得到意想不到的后果。

php忽略错误符号 @

@是php语言里的一个忽略错误的字符,当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。例如:

@include(“file.php”);

需要注意的是,@ 运算符只对表达式有效。可以这样理解,如果能从某处得到值,就能在它前面加上 @ 运算符。例如,可以把它放在变量、函数和 include 调用、常量等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

另外,@通常是与or die()一同使用,例如:

(@include(“file.php”))
 OR die(“Could not find file.php!”);

上述语句的意思是,如果包含file.php不成功的话,比如file.php文件不存在时,则在网页上打印“Could not find file.php!”,并且立即停止程序的执行。

[email protected],那么当include(“file.php”)返回错误时,网页上打印的是:

Warning: include(file.php) [function.include]: failed to open stream: No such file or directory
Warning: include() [function.include]: Failed opening ‘file.php’ for inclusion (include_path=’.;C:\php5\pear’)

有关or die()一些用法

die()函数大家用得很熟了,不过or die()这样的写法,所产生的一些效果你也许还不知道。

首先理解下die()。

◆die定义和用法

die() 函数输出一条消息,并退出当前脚本。

◆语法

die(status)

status 必需。规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出。

如果 status 是字符串,则该函数会在退出前输出字符串。

如果 status 是整数,这个值会被用作退出状态。退出状态的值在 0 至 254 之间。退出状态 255 由 PHP 保留,不会被使用。状态 0 用于成功地终止程序。

注:如果 PHP 的版本号大于等于 4.2.0,那么在 status 是整数的情况下,不会输出该参数。

◆php or die() 语句

经常看到这样的语句:

$file = fopen($filename, ‘r’) or die(“抱歉,无法打开: $filename”);

or在这里是这样理解的,因为在PHP中并不区分数据类型,所以$file既可以是int也可以bool,所以这样的语句不会报错。但其处理过程可能有些朋友不大明白。 其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就是”真”),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。 结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的出错信息,也就达到了调试的目的。 就这样。

通常与错误管理一起使用的两个函数是die()和exit()(严格说来,它们是语言构造而不是函数,但是谁在意这些呢)。当在脚本中调用die()和exit()时,将会终止整个脚本。它们都可用于阻止脚本继续执行,而使得某些重要的操作(如建立一条数据库连接)不会发生。你还可以给die()和exit()传递一个将在浏览器中打印出来的字符串。

通常可以看到在OR条件语句中使用die()和exit()。例如

include(‘config.inc.php’) OR die (‘Could not open the file. ‘);

在包含这样一行代码之后,如果PHP不能包含配置文件,将会执行die()语句,并且会打印could not open the file消息。

!defined(‘CURSCRIPT’) && define(‘CURSCRIPT’, “);//意思是如果没定义CURSCRIPT常量,则定义CURSCRIPT为空.

在全书和PHP手册中,你将会看到它的各种变体,因为它是一种处理错误的快捷方式(但可能处理过度),而无需使用自定义的错误处理程序。

其实die和exit是等价的,用来终止当前脚本,常用在调试程序的时候。参考php断点调试的几种方法讨论

php @ 忽略错误需谨慎使用

目前的“@”错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果在某个不存在或者敲错了字母的函数调用前用了“@”来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。例如:

@include(“file.php”);

这样的语法,当返回错误时,程序会立即停止,不再会执行此语句后面的语句,但是网页上会是一片空白。这将会给我们检查程序带来很大的麻烦。

因此,[email protected],务必同时加上or die()来打印相印的错误描述。