apache2.4 + php5.6 中curl扩展无法加载的原因及解决方法

win7 x64的环境,原来已经部署apache 2.2 + php5.4 ,一切安好。后来要测试最新版本的dokuwiki,只能在php5.6以上环境运行。然后发现php5.6只能跑在apache 2.4中,真是连环套。

上述提到的apache和php均为32位版本

apache 2.4和php5.6的部署比较顺利,现在系统中同时存在apache2.2+php5.4 和 apache2.4+php5.6,然后发现apache2.4中curl模块无法启动。

在apache的error.log中有如下信息:

PHP Warning:  PHP Startup: Unable to load dynamic library 'c:/php56/ext\\php_curl.dll' - \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xcf\xb5\xcd\xb3\xef\xbf\xbd\xde\xb7\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd %1\xef\xbf\xbd\xef\xbf\xbd\r\n in Unknown on line 0

 其中的\x 字符串无需理会,从中得不到有用信息。

网络中相关的解决方案有不少,但尝试过都不能解决本人问题,应该跟本机环境有关。参考各种文档后几经尝试,终于将问题解决。主要原因是php_curl.dll启动时会另外调用几个相关的DLL,包括libssh2.dll,ssleay32.dll libeay32.dll。解决办法主要有两种:一是将php目录加入PATH环境变量;二是将上述三个DLL拷贝到PATH变量中已有的文件夹中。

如果系统中只有一个版本的apache,那么在系统的环境(非用户环境)变量PATH中加入php所在的路径即可。但如果像本案例同时需要部署两个版本的apache的话,则需要把上述三个DLL拷贝到一个设置了PATH变量的公共的目录中,并保证这个目录在PATH中的位置在php目录前。因为在PATH中是有先后顺序的,在PATH中同时有c:\php54和c:\php56的话,那么永远只会访问c:\php54中的三个DLL。

一般的解决方案是将DLL拷贝入到C:\windows中。在查看本机后,发现之前部署apache2.2+php5.4就已经是这样处理的,C:\windows中已经存在这三个DLL文件(C:\windows是缺省存在PATH变量中的,拷贝到windows目录中,则无需在环境变量中添加Php的目录,也无需重启服务器)。但因为版本兼容问题,php5.6调用这三个DLL后也无法正确启动。

将两个apache停掉后,把php5.6目录中的三个DLL拷贝到c:\windows中,覆盖原来的文件。然后再启动两个apache,现在两者均可正常使用curl函数了。说明php5.6里的DLL是向下兼容php5.4版本的,而php5.4则因版本低无法在php5.6中使用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值