簡體   English   中英

PHP7.4 和 firebird/interbase: ibase_connect(), ibase_query() 調用未定義的 function

[英]PHP7.4 and firebird/interbase: ibase_connect(), ibase_query() Call to undefined function

我正在處理一個遺留的 firebird 數據庫,似乎無法讓它與 PHP7.4 一起工作。 PHP7.4 中不再提供 interbase 擴展,我只能安裝 PDO_FIREBIRD。

PECL 上也沒有發布。 https://pecl.php.net/package/interbase

任何提示如何使它與 7.4 一起工作?

PHP 的最新版本確實不再隨基礎間 package 一起提供。 相反,您可以使用Firebird PHP 驅動程序,它是 interbase package 的一個分支和繼續開發。

好吧,在處理遺留的 Firebird 數據結構時,我遇到了一些警告。

簡而言之,我必須解決兩個廣泛的問題:

1 - 將客戶端庫與數據集磁盤結構 (ODS) 匹配

每個 Firebird 版本都支持有限范圍的磁盤結構 (ODS)。 以下鏈接對此主題有很好的參考:

https://ib-aid.com/en/articles/all-firebird-and-interbase-on-disk-structure-ods-versions

ADODB 和 PHP PDO 是主機系統中客戶端庫的抽象層。 PHP 7.4支持 FB 3.0 及更高版本的客戶端。 因此,有必要將抽象層與可用的客戶端庫相匹配。

對於高達 FB 2.5 的數據集:

  • 磁盤結構應達到 ODS 11;
  • 客戶端版本應達到 FB 2.5.9(推薦);
  • PHP 引擎應該達到 7.3(7.1 已經有問題);
  • 遺留函數ibase_fbird_應該可以正常工作;
  • ADODB、PHP PDO等應該不行

對於從 FB 3.0 開始的數據集:

  • 磁盤結構應為 ODS 12 或更高;
  • 客戶端版本應為 FB 3.0 或更高版本;
  • PHP引擎應為7.4或更高;
  • 遺留函數ibase_fbird_應該工作;
  • ADODB、PDO 等應該可以正常工作。

2 - 匹配客戶端和服務器平台和參數

對於任何客戶端和服務器組合:

  • 客戶端和服務器應該共享相同的平台,32 位或 64 位;
  • 連接應使用 SQL 方言 1 或 3,具體取決於舊數據集的使用情況;
  • 字符編碼應為 WIN-1251(舊版)或 UTF-8(新默認值)。

觀點

根據我的經驗,很難將舊版 FB 連接“強制”到最新的 PHP 引擎中。 我認為 Linux 系統更具挑戰性,因為libgcc從版本 5 到版本 6 有不同的入口點(我猜......),而且不支持musl

Windows 中的事情更加靈活,因為fbclient.dll是連接所需的唯一客戶端庫,它依賴於多年來保持相同入口點的 Win32 庫。

我建議將數據集升級到 Firebird 4 並使用更新的擴展和客戶端。 但是,如果這不是一個選項,則應該從主機操作系統簡化降級,通過 PHP 引擎,直到 FB 客戶端。

不幸的是,我相信“這就是方法”。

一切順利。

最近我在將 firebird 與 php 連接時遇到問題。 我經歷了很多問題,直到我發現 apache bin 文件夾中必須有 3 個 dll。 gds32.dll msvcr71.dll fbclient.dll。

沒有這些 dll,它就無法工作,由於某些未知原因,新版本的 xampp 丟失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM