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

标签 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 创建一个特定的版本?

最佳答案

不,没有办法告诉 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 DB_File 创建文件时如何指定 BerkeleyDB 的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31152753/

相关文章:

php - MySQL 基于主键以外的其他内容进行替换

perl - 从字符串中提取格式不一致的日期(日期解析,NLP)

c - memcpy 段错误看似无害

database - 在 Berkeley Database JE 中遍历环境

php - 从访问控制列表中排除公共(public)页面

php - HTML5 - 视频标签播放视频但不播放音频

php - 406- Not Acceptable 响应 - jQuery AJAX

xml - perl - 从 xml 文件中删除节点

PERL:如何检测字符串编码以便我可以使用正确的字符集

java - Berkeley DB JE 5.0.x 在 Maven Central 中的坐标是什么?