使用perl DB_File创建文件时如何指定BerkeleyDB的版本?

时间:2015-07-01 04:51:15

标签: php perl berkeley-db

在我们的perl脚本和PHP脚本之间,我们似乎遇到了BerkeleyDB中的版本不兼容问题。我们的perl脚本生成BDB,我们的php脚本只是读取它们。

我们的perl脚本使用DB_File创建BDB文件:

use DB_File;
$DBFILE="output.db";
tie(%db, "DB_File", $DBFILE, O_RDWR | O_CREAT, 0644)
    or warning("Could not open db file '$DBFILE'");

之前创建的文件类型为:

$ file output.db
output.db: Berkeley DB (Hash, version 9, native byte-order)

但是,在升级sys-libs / db和DB_File之后,现在创建一个类型为的文件:

$ file output.db
output.db: Berkeley DB (Hash, version 10, native byte-order)

在系统的另一个系统中,我们有一个PHP脚本。升级发生时,我们的PHP代码(基于dba_open())开始抱怨版本:

Notice:  dba_open(): output.db: unsupported hash version: 10 in dbread.php on line 16

我尝试过升级PHP,但版本10似乎还不支持。

有没有办法告诉perl的DB_File在创建数据库时创建特定版本?

1 个答案:

答案 0 :(得分:5)

不,没有办法告诉perl的DB_File创建特定版本,AFAIK libdb本身没有该功能

如果编译/链接libdb的4.x版本,那么DB_File只能使用该版本

因此,如果您需要使用libdb-4.x的DB_File,则必须在另一个@INC目录中降级或安装另一个副本

安装时,这是您编辑的文件https://metacpan.org/source/PMQS/DB_File-1.835/config.in

只需更改DBNAME = -ldb-2.4.10以匹配您的php安装使用的版本

使用https://metacpan.org/pod/ExtUtils::MakeMaker#INSTALL_BASE指定其他安装目录,然后通过https://metacpan.org/pod/perlrun#PERL5LIB告诉perl在哪里找到它

https://metacpan.org/pod/local::lib也记录了这个