编程语言
首页 > 编程语言> > php – 如何使用perl DB_File创建文件时指定BerkeleyDB的版本?

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

作者:互联网

我们似乎在我们的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在创建数据库时创建特定版本?

解决方法:

不,没有办法告诉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也记录了这一点

标签:php,perl,berkeley-db
来源: https://codeday.me/bug/20190609/1204173.html