想要使用Xdebug分析php代码,根据安装了php7.4.3-ts-win64版本,运行在Apache2.4.41下。主要遇到两个问题:
1.设置好httpd.conf跟php.ini后启动apache服务,win7应用程序日志中提示一系列模块无法加载,反复查资料,对比分析,最后把php.ini中extension_dir路径设置为绝对路径后解决:
extension_dir = "c:\php74\ext"
2.再次查看日志,发现还有一个错误:
php[27368]
PHP Warning: PHP Startup: Unable to load dynamic library 'curl'
(tried: c:\php74\ext\curl (找不到指定的模块。),
d:\php74\ext\php_curl.dll (找不到指定的模块。))
("D:\ApachePhpWin64\Apache244\bin\httpd.exe" -k runservice)
即curl模块无法加载,php_curl.dll跟其他已经成功加载的模块同在一个目录下,不可能是路径问题了。又搜索了半天,找到各种解决办法,也有跟着说解决了的。其中或者版本不一致,或者提到的文件根本不存在,无一能适用于笔者遇到的问题。
最后总算总结出了原因:不是路径问题,就是依赖问题或者版本了(php自带的dll基本不会是版本问题)。
最终试探出解决方案,在httpd.conf中添加几行:
LoadFile "c:/php74/libcrypto-1_1-x64.dll"
LoadFile "c:/php74/libssh2.dll"
LoadFile "c:/php74/libssl-1_1-x64.dll"
其中,libcrypto是libssl依赖的,若没有它会提示libssl-1_1-x64.dll无法加载。
为了验证,又切换回原来的apache2.4.10发现同样的配置依然是正常的。
基于这点,还有一种简单方式,就是直接把php所在文件夹添加到系统路径中,这样避免再用到其他扩展的时候还得添加相应的依赖。