set_error_handle 和 at(@)符号的问题

xjwchy 2012-02-15 04:18:44
问题是这样的,我用set_error_handle 将一些系统错误或者警告信息写入到日志文件中。
但是对于一些api 比如fopen之类的,如果文件不存在的情况下也会跑到 自己写的错误处理函数中,之前是在fopen之前加上@符号,对诸如此类问题不进行显示。
如果我想在使用set_error_handle的情况下还能不把@的功能去掉。怎么做啊?
谢谢大侠们了
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-02-20
  • 打赏
  • 举报
回复
经测试,#5的代码可以满足你的要求!
执行后,若
fopen('/tmp/foo', 'r');
失败,则显示
Unknown error type: [2] fopen(/tmp/foo) [function.fopen]: failed to open stream: No such file or directory


@fopen('/tmp/foo', 'r');
失败,则无任何显示
xjwchy 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zgycsmb 的回复:]
帮顶
接分。。
[/Quote]
这样的话 也达不到需求啊。
fopen的文件如果不存在 会是个warning的,如果你的error_reporting里面有设置warning的话 一样会输出错误,而没有用set_error_handler的话,在fopen前面加一个@符号就不会输出了,现在是不想放过waring但是对于像这种的warning又可以放过,到底怎么做呢?
xjwchy 2012-02-20
  • 打赏
  • 举报
回复
感谢 5楼 7楼 恍然大悟
@会修改error_reporting的级别
xjwchy 2012-02-16
  • 打赏
  • 举报
回复
来帮帮忙啊?
阿飞呓语 2012-02-16
  • 打赏
  • 举报
回复
可以去掉,使用set_error_handler你只需要注意两点:
1.set_error_handler只会捕获error_reporting里定义的错误类型,这个可以在php.ini里配置,也可以使用函数设置;
2.自定义的错误处理函数返回值如果为false,则会触发php的默认错误处理。而返回值为true则不会触发php默认的错误处理,则看不到那个讨厌的报错了。

至于写法你可以参考一下。
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
//如果这个错误类型没有包含在error_reporting里
return;
}

switch ($errno) {
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Aborting...<br />\n";
exit(1);
break;

case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;

case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
echo "Unknown error type: [$errno] $errstr<br />\n";
break;
}
//返回false则会触发php的默认错误处理,反回true则只用自定义函数处理。
return true;
}
set_error_handler('myErrorHandler');
fopen('/tmp/foo', 'r');
heyli 2012-02-15
  • 打赏
  • 举报
回复
用try catch捕获

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧