2015-07-01 52 views
4

我們似乎在我們的perl腳本和我們的PHP腳本之間在BerkeleyDB中遇到了版本不兼容問題。我們的Perl腳本生成BDB,而我們的PHP腳本只是讀取它們。如何在使用perl DB_File創建文件時指定BerkeleyDB的版本?

我們的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

文件有多大?您能否從目標系統上的文本輸入生成「正確的」Berkeley DB版本? – AnFi

回答

5

沒有,有沒有辦法告訴Perl的DB_File創建一個特定的版本,據我所知的libdb本身不具備該功能

如果你編譯反對的libdb 4.x版/鏈接,然後DB_File只得到使用該版本

所以如果你需要DB_File使用的libdb-4.x中你將不得不downgrad或在不同的@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不同的安裝目錄,然後告訴perl的地方與https://metacpan.org/pod/perlrun#PERL5LIB

https://metacpan.org/pod/local::lib還介紹找到它的版本

相關問題