php无法加载动态库的解决办法:1、将PHP的集成包里的“libmySQL.dll”复制到system32目录下;2、将PHP的解压目录添加到PATH里;3、在Apache的配置文件用loadfile去加载一些动态链接库。
php加载动态库失败
PHP的集成包里带了很多的动态链接库,但当我们按照说明配置好后,运行phpinfo()却发现好多个模板并没有加载。仅管我们在php.ini中已经将对应链接库前面的注释(;)去掉了。
本人在配置WAMP时发现一个很有趣的事情:有时mysql模块能加载,有时又不能加载。后经仔细研究发现,能加载时mysql用的都是安装文件,不能加载时mysql用的大多是压缩包。两都会有什么区别呢?
区别就在于安装包在安装里可以选择将mysql的安装目录(./MySQL*.*/bin)添加到PATH里。
这样又会有什么效果呢?原来在这个目录下有个和PHP的集成包里同名的文件--libmySQL.dll。
上网搜索发现还有其它的解决办法:
将PHP的集成包里的libmySQL.dll复制到system32目录下--该目录通常肯定是在PATH里的;
还有一个不需要改PATH的办法,就是在Apache的配置文件里加一句:[loadfile X:/*/libmySQL.dll]要用绝对路径。
问题的根源似乎已经找到了,其它的模块是不是也可以这样解决呢。
答案是肯定的,可以。
最省事的方法是将PHP的解压目录(通常包含libmysql.dll、php.exe等)添加到PATH里;
然后重启系统--只重启apache是不行的,你在phpinfo()里查看的“Apache Environment”的PATH参数时就会发现,“PATH ”这一项根本没有变,如能不重启系统就更改应用,本人目前还不知道,谁知道,请告诉我。
还有个不用改PATH也就不用重启系统系统的办法就是在Apache的配置文件用loadfile去加载一些动态链接库。
本人经测试将我已知的模块及其要加载的动态链接库列出来:
PHP模块 运行时要加载的动态链接库 ------------------------------------------------------------ php_fdf.dll ->fdftk.dll php_interbase.dll ->gds32.dll php_pdo_firebird.dll ->gds32.dll php_curl.dll ->ssleay32.dll php_ldap.dll ->ssleay32.dll php_openssl.dll ->ssleay32.dll php_mcrypt.dll ->libmcrypt.dll php_mhash.dll ->libmhash.dll php_msql.dll ->msql.dll php_mssql.dll ->ntwdblib.dll php_pdo_mssql.dll ->ntwdblib.dll php_mysql.dll ->libmysql.dll php_mysqli.dll ->libmysql.dll php_pdo_mysql.dll ->libmysql.dll
所要加载的动态链接库全部位于PHP的集成的包解压目录(通常包含libmysql.dll、php.exe等)。该目录还有三个文件:fribidi.dll、libeay32.dll和libswish-e.dll,本人目前尚不知道它们有何用处。至于其中每个模块的名称和作用,本人就不班门弄斧了。
推荐:《PHP教程》
注:该方法适用于php5.1.X、php5.2.X系列,php.4X未经测试。