php-Zend数据库适配器-未捕获的异常-堆栈跟踪显示用户名和密码

编程之家收集整理的这篇文章主要介绍了php-Zend数据库适配器-未捕获的异常-堆栈跟踪显示用户名和密码编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在使用Zend_Db_Adapter,特别是Zend_Db_Adapter_Pdo_Abstract.我可以想象这个问题也会扩展到其他适配器.引发PDOException时,将其“未捕获”,并且在许多情况下,堆栈跟踪会显示用户名和密码.我已验证以下PDO异常均在堆栈跟踪中显示凭据:>SQLSTATE[HY000][2005]未知的MySQL服

我正在使用Zend_Db_Adapter,特别是Zend_Db_Adapter_Pdo_Abstract.我可以想象这个问题也会扩展到其他适配器.引发PDOException时,将其“未捕获”,并且在许多情况下,堆栈跟踪会显示用户名和密码.

我已验证以下PDO异常均在堆栈跟踪中显示凭据:

> sqlSTATE [HY000] [2005]未知的MySQL服务器主机…片段…
> sqlSTATE [HY000] [2013]在“读取授权包”时与MysqL服务器的连接断开
> sqlSTATE [08004] [1040]连接太多
> sqlSTATE [28000] [1045]用户… snip …的访问被拒绝(使用密码:是)

我的生产站点在出现错误不显示堆栈跟踪,并且我仍然希望在开发环境中查看这些错误的堆栈跟踪,只是不希望用户名和密码清晰显示.

解决方法:

我不解决解决了…让我解释一下:

当前没有办法从未捕获的异常中禁用堆栈跟踪. PHP不允许您这样做.

因此,我不会尝试禁用它,而不会尝试禁用它……我将安装一个exception handler,然后它将记录回溯信息.我不会在屏幕上显示它.我不会检查它所在的环境.我不会检查请求信息.我只是将其记录到文件中,并显示通用的500服务器错误页面.

现在,在您的处理程序中,您可以有选择地显示调用信息,因此您可以选择是否记录参数信息:

set_exception_handler(function($exception) {
    $log = array(
        'message' => $exception->getMessage(),
        'trace' => array(),
    );
    foreach ($exception->getTrace() as $item) {
        $trace = isset($item['class']) ? $item['class'] . $item['type'] : '';
        $trace .= $item['function'] . '()';
        $log['trace'][] = $trace;
    }
    save_to_log($log);
});

但是,我将未捕获的异常视为您的应用程序中存在错误的标志.您应该找到它们并修复它们.如果您获得足够多的信息以至于担心要在页面显示参数,那么您真的需要解决以下事实:首先存在未捕获的异常.

编辑这是发生的情况的演示:

class Foo {
    public function doSomething($user, $password) {
        throw new Exception('Something Went Wrong!');
    }
}

$f = new Foo();

$f->doSomething('user', 'passw');

on CodePad结果:

<br />
<b>Fatal error</b>:  Uncaught exception 'Exception' with message 'Something Went Wrong!' in /code/MxH9Ls:4
Stack trace:
#0 /code/MxH9Ls(10): Foo-&gt;doSomething('user', 'passw')
#1 {main}
  thrown in <b>/code/MxH9Ls</b> on line <b>4</b><br />

但是,使用异常处理程序(修改为打印而不是日志):

set_exception_handler(function($exception) {
    $log = array(
        'message' => $exception->getMessage(),
        'trace' => array(),
    );
    foreach ($exception->getTrace() as $item) {
        $trace = isset($item['class']) ? $item['class'] . $item['type'] : '';
        $trace .= $item['function'] . '()';
        $log['trace'][] = $trace;
    }
    echo $log['message'] . "\n";
    foreach ($log['trace'] as $trace) {
        echo " - $trace\n";
    }
});

class Foo {
    public function doSomething($user, $password) {
        throw new Exception('Something Went Wrong!');
    }
}

$f = new Foo();

$f->doSomething('user', 'passw');

On CodePad产生:

Something Went Wrong!
 - Foo->doSomething()

总结

以上是编程之家为你收集整理的php-Zend数据库适配器-未捕获的异常-堆栈跟踪显示用户名和密码全部内容,希望文章能够帮你解决php-Zend数据库适配器-未捕获的异常-堆栈跟踪显示用户名和密码所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

猜你在找的PHP相关文章

字符串函数 strlen:获取字符串的长度,获取的是字符串的字节长度 字符:一个完整的符号,a,中 字节:由8位组成 一个字符最少等于一个字节:ASCII码,a,b,通常英文字符都是占用一个字节 中文在gbk或者gb2312编码里,占用两个字节 中文在utf-8里最少占用3个字节,有可能是4个字节 substr:截取字符串,以字节为单位截取 string sub...
1.什么php? 一种服务器端的 HTML 脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C,Java 和 Perl,而且容易学习。该语言让 Web 开发人员快速的书写动态生成的网页。P...
范式:Normal Format规定的一种设计方式范式特点:范式有很多,从低级到高级有六级左右,低级往高级一级比一级要求严格。关系型数据库通常设计只需要满足其中一半,满足第三范式即可。满足第三范式必须先满足第二范式,第二范式又必须先满足第一范式。第一范式:1NF数据表的设计的字段中,每个字段都不能再分,每个字段都必须是最小的不可分割的单位(原子性) 讲师代课表 要知...
自然界中实体与实体之间的联系如何在数据库中进行体现。多对一/一对多1.需求:有一个学生表一张班级表 一个学生只属于一个教室,一个教室却包含多个学生。这种关系就称之为多对一或者一对多的关系 多对多2.需求:有一个教师表和一个学生表 一个学生被多个老师教过,一个老师教过多个学生,这个关系就称之为多对多的关系 一对一3.需求:一个学生信息,有10种信息,其...
mysql中也分为三大数据类型:数值型,字符型,时间日期型 数值型数值型分为整数型和小数型(包含小数部分的数据类型)整型mysql中光整数型数据类型就有五种:tinyint,smallint,mediumint,int,bigint tinyint:迷你整型,占用1个字节保存数据,能够表示256个数值 smallint:小整型,占用2个字节保存数据,能够表示6...
存储引擎:处理和保存数据的方式。主要存储引擎是InnoDB和Myisam InnoDB:会创建一个结构文件,数据和索引都放在ibdata1文件里 Myisam:创建三个文件,结构,索引和数据mysql存储引擎 引擎因为费用的问题分为两类 免费:InnoDB和Myisam都是免费 收费:BDB,memory,archive都是收费 Myisam与I...
1.mytable1存储的数据是utf8字符集(在创建表的时候,指定了表的数据存储字符集为utf8)2.cmd控制台只能是gbk格式的数据:说明cmd下只能输入和显示gbk格式的数据3.set names gbk的功能 客户端与服务端进行不同编码的通信的原理 了解数据库的字符集 查看数据库支持哪些字符集?show character set; mysql支持39种字...
数据库词汇数据:data,凡是能携带信息的媒介都是数据 硬盘数据:保存在磁盘中,以二进制形式保存 内存数据:运行在内存中 数据库:Database,高效存储和处理数据的媒介(凡是存放数据的地方都可以称之为数据库),数据库分为两大阵营:关系型数据库,非关系型数据库。 数据库系统:Database System = DBMS +DB,DBMS(Database Manage...
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注