易截截图软件、单文件、免安装、纯绿色、仅160KB

Berkeley 5.0.21提供的PHP扩展的Bug

今天装了个Berkeley 5.0.21进行测试。
顺利编译了自带的php_db4模块后,进行测试。发现del操作报错:
illegal flag specified to DB->del
<?php
dl('db4.so');
$db = new Db4();
$db->open(null, 'info.db', 'info');
$db->put('key', 'value');
var_dump($db->del('key'));
$db->close();
$db->del的返回值是22。也就是参数错误。
之前没接触过BDB,也不知道正不正常。但怀疑是不是因为php是支持4.x系列的,因此进到php模块的代码看了一下。
php的del的实现很简单:
/* {{{ proto bool DB4::del(string $key [, object $txn])
*/
ZEND_NAMED_FUNCTION(_wrap_db_del)
{
DB *db = NULL;
DB_TXN *txn = NULL;
zval *txn_obj = NULL;
u_int32_t flags; // 出错行:未初始化!改为 u_int32_t flags = 0;
DBT key;
char *keyname;
int keylen;
getDbfromThis(db);
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|O", &keyname, &keylen,
&txn_obj, db_txn_ce) == FAILURE)
{
return;
}
if(txn_obj) {
getDbTxnfromThis(txn);
flags = 0;
}
memset(&key, 0, sizeof(DBT));
key.data = keyname;
key.size = keylen;
RETURN_LONG(db->del(db, txn, &key, flags));
}
/* }}} */
因为我没有传递txn对象,因此txn_obj判断为false,出错原因就很简单了:
flags没初始化。
看起来低级错误谁都会犯。
修正后测试正常。


相关文档:

[转]PHP分页显示制作详细讲解


<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体" ......

Linux 下php的安装

环境软件版本介绍:
 
   APACHE 2.0.59
   PHP5.2.3
   MYSQL5.0.45
   GD-2.0.35
   Zend Optimizer v3.3.0
  
                     ......

php正则取嵌套html标签

<?php
$s = <<<html
<html>
<head>
<title>nested tag test</title>
<mce:script type="text/javascript"><!--
alert('fdsafdasfasd');
// --></mce:script>
</head>
<body>
<div id=0>
<div id=1><img name="im ......

php之造车论

现在php有很多开发框架,比如zend的zendframe——一个效率很低,但威力很大的巨人,symfony——一个适用大型应用却体积轻巧的帮手,cakephp,codelgniter,thinkphp,fleaPHP等等优秀作品。
也许因为这个原因,php很难成为主流。选择多了反而不知道选择哪个好。不像java有统一的主流框架,你可以选择e ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号