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未经测试。