代码改变世界

PHP菜鸟手记——如何解决无法装载动态链接库的问题

2010-11-15 14:26 by FantasySoft, ... 阅读, ... 评论, 收藏, 编辑

为了兑现“做最懂技术的产品经理”的诺言,我上周开始捣腾PHP了。虽然早在大学读书的时候,我也曾经玩过一小段时间的PHP,不过到如今,也忘得一干二净了。所以,偶和一个PHP菜鸟无异。既然是菜鸟,自然先从搭建PHP开发环境开始了。

首先,从PHP的官方网站下载了PHP 5.2.14 For Windows的压缩包,解压至D盘的PHP目录;随后下载了Apache HTTP Server的最新版本——2.2.17,是MSI格式的,安装也非常简单。接着就是将PHP与HTTP Server关联起来——让HTTP Server能够处理php请求,其实也就是修改httpd.conf文件了。有关这一点,网上的资料已经非常详细,官方的介绍在这里。环境搭建好了之后,为了让PHP能够更强大,接下来就是通过修改PHP.ini文件来装载所需的PHP Extention(PHP扩展)了,而这些扩展在Windows平台下就是一个个动态链接库(DLL文件)。这下老大难的问题来了——无法装载某些动态链接库(PHP startup: Unable to load dynamic library)。对于这个问题,我们通过Google能够找到如下的解决方案:

  1. 切记修改Windows的环境变量,在PATH环境变量当中增加PHP所在的路径以及PHP扩展所在的路径;
  2. 如果第一点做了之后,仍然无法解决,就要留意被加载的动态链接库所依赖的DLL文件是否缺失。PHP官方提供了一个在Windows下安装PHP扩展的指南,里面指出了依赖关系。 

通常上述两个方案就能解决无法装载动态链接库的问题了,但是也会有例外的。上个星期我在搭建PHP开发环境的时候,就遇到了无法装载php_curl.dll动态链接库的问题。不管是环境变量还是依赖的DLL文件(官方文档指出:php_curl.dll所依赖的文件是libeay32.dllssleay32.dll)都是齐备的,这让我百思不得其解。我把网上能够找到的办法都试了个遍,甚至还把相关的dll文件全部复制到了Windows的system32目录当中(其实这样做是毫无意义的)。这个小问题让我整个周末如鲠在喉,甚是不爽。经过一番思考,我还是把问题定位到了动态链接库所依赖的DLL文件缺失上。

尽管官方文档告诉我php_curl只依赖上述两个DLL文件,但这是真的么?于是,我在下载了查看DLL依赖关系的软件——Dependency Walker。用这个软件一看,果然不出我所料:php_curl.dll所依赖的zlib.dll不存在!找到问题根源,接下来的事情都好办了,通过Google找到zlib的老巢,下载最新的zlib.dll,然后将该文件放到PHP的安装目录下即可(这里仍然需要注意两点,一是对于下载的DLL文件,如果文件名不是zlib.dll,需要改为zlib.dll;二是PHP安装的目录必须加入到PATH环境变量中)。至此,问题解决!