在我们的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在创建数据库时创建特定版本?
答案 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在哪里找到它