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

PHP Startup: Unable to load dynamic library 問題。

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

我個人遇到的是'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

昨天還好好的沒有報錯,今天就開始報錯了。。重裝php也沒有用。

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

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

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

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

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

回答
編輯回答
遲月

錯誤信息提示的是無法加載對應的庫,那么可能出現(xiàn)的問題就是,無法找到文件,或者文件無法正常使用。在windows下經(jīng)常會出現(xiàn)這樣的問題(因為linux下一般都是編譯安裝,有仇當時就報了)。

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

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

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

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

2018年6月14日 02:33