PHP Startup: Unable to load dynamic library ... (tried:... 这种算是比较常见的问题,
当然这里只讨论在保证 php.ini 中启用了相关扩展,并且相应的.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报错)。
至于后者,根据
PHP unable to load dynamic library "php_pdo_oci.dll" - Stack Overflow
中的说法,需要安装Oracle Instant Client.
(Oracle官网需要注册才能下载,注册基本上都是必填项。。注册成功之后不能登录,过了好久才同步为登录状态。。)。
实测有效。但需要的究竟是其中哪一部分组件不明。
其他的一些什么方法,什么将ext目录加入环境变量之类的试过了,无效。
我非常想了解:
1.如何真正解决这两个问题?
2.如何解决类似的扩展加载失败问题,有没有什么实用的经验?
3.是什么原因导致此类情况发生?
为什么会有系统.dll文件甚至运行库组件丢失的情况?
(从昨天到今天并未浏览危险网站,除了php报错也没有发现其他任何疑似中毒的现象)
欢迎各位提供意见和思路。
问题属于环境配置,基本知识点是程序的运行机制。要彻底解决问题,可以从两方面入手:1. 动态链接库作用是什么? 2. PHP如何加载动态链接库?明白这两个问题,疑问自然迎刃而解。
建议使用
php -i|findstr ext
和php -m
两个命令查看配置/拓展加载情况,并试试在php.ini
中使用绝对路径加载拓展。