我们的 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 在哪里可以找到它
关于php - 使用 perl DB_File 创建文件时如何指定 BerkeleyDB 的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152753/