鍍金池/ 問答/PHP/ PHP Startup: Unable to load dynamic libr

PHP Startup: Unable to load dynamic library 問題。

PHP Startup: Unable to load dynamic library ... (tried:... 這種算是比較常見的問題,
當(dāng)然這里只討論在保證 php.ini 中啟用了相關(guān)擴(kuò)展,并且相應(yīng)的.dll文件確實(shí)存在于加載目錄中的情況。

我個(gè)人遇到的是'pdo_firebird'和 'pdo_oci'.

D:\Tool\php\php-7.2.7-Win32-VC15-x64>php

Warning: PHP Startup: Unable to load dynamic library 'pdo_firebird' (tried: D:\Tool\php\php-7.2.7-Win32-VC15-x64\ext\pdo_firebird (找不到指定的模塊。), D:\Tool\php\php-7.2.7-Win32-VC15-x64\ext\php_pdo_firebird.dll (找不到指定的模塊。)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'pdo_oci' (tried: D:\Tool\php\php-7.2.7-Win32-VC15-x64\ext\pdo_oci (找不到指定的模塊。), D:\Tool\php\php-7.2.7-Win32-VC15-x64\ext\php_pdo_oci.dll (找不到指定的模塊。)) in Unknown on line 0

昨天還好好的沒有報(bào)錯(cuò),今天就開始報(bào)錯(cuò)了。。重裝php也沒有用。

前者,通過
PHP Startup: Unable to load dynamic library php_pdo_firebird.dll : The Official Microsoft IIS Forums
中的描述,向php主目錄中添加一個(gè)fbclient.dll可以解決。
實(shí)測(cè)的確消除了報(bào)錯(cuò),只是需要下載和php對(duì)應(yīng)版本的firebird.
但問題在于,php主目錄下本來沒有這個(gè)fbclient.dll也是可以正常工作的。所以這算是某種變通的補(bǔ)救措施(甚至可能僅僅是阻止了php報(bào)錯(cuò))。

至于后者,根據(jù)
PHP unable to load dynamic library "php_pdo_oci.dll" - Stack Overflow
中的說法,需要安裝Oracle Instant Client.
(Oracle官網(wǎng)需要注冊(cè)才能下載,注冊(cè)基本上都是必填項(xiàng)。。注冊(cè)成功之后不能登錄,過了好久才同步為登錄狀態(tài)。。)。
實(shí)測(cè)有效。但需要的究竟是其中哪一部分組件不明。

其他的一些什么方法,什么將ext目錄加入環(huán)境變量之類的試過了,無效。

我非常想了解:
1.如何真正解決這兩個(gè)問題?
2.如何解決類似的擴(kuò)展加載失敗問題,有沒有什么實(shí)用的經(jīng)驗(yàn)?
3.是什么原因?qū)е麓祟惽闆r發(fā)生?
為什么會(huì)有系統(tǒng).dll文件甚至運(yùn)行庫組件丟失的情況?
(從昨天到今天并未瀏覽危險(xiǎn)網(wǎng)站,除了php報(bào)錯(cuò)也沒有發(fā)現(xiàn)其他任何疑似中毒的現(xiàn)象)

歡迎各位提供意見和思路。

回答
編輯回答
遲月

錯(cuò)誤信息提示的是無法加載對(duì)應(yīng)的庫,那么可能出現(xiàn)的問題就是,無法找到文件,或者文件無法正常使用。在windows下經(jīng)常會(huì)出現(xiàn)這樣的問題(因?yàn)閘inux下一般都是編譯安裝,有仇當(dāng)時(shí)就報(bào)了)。

那么出現(xiàn)這種問題,無法就是extension_dir配置錯(cuò)誤或者dll對(duì)環(huán)境運(yùn)行有依賴,比如VC2015或者依賴數(shù)據(jù)庫的一些dll,而這些dll必須是安裝數(shù)據(jù)庫后才會(huì)到全局環(huán)境當(dāng)中

2017年1月17日 10:37
編輯回答
拮據(jù)

問題屬于環(huán)境配置,基本知識(shí)點(diǎn)是程序的運(yùn)行機(jī)制。要徹底解決問題,可以從兩方面入手:1. 動(dòng)態(tài)鏈接庫作用是什么? 2. PHP如何加載動(dòng)態(tài)鏈接庫?明白這兩個(gè)問題,疑問自然迎刃而解。

建議使用php -i|findstr extphp -m兩個(gè)命令查看配置/拓展加載情況,并試試在php.ini中使用絕對(duì)路徑加載拓展。

2018年6月14日 02:33