PHP7配置php.ini后mysqli扩展仍未激活,求解决方法
我之前配置PHP7+Apache的时候也碰到过几乎一样的问题,给你几个实用的排查方向,一步步来应该能解决:
确认修改的是Apache实际加载的php.ini文件
很多人容易踩这个坑:PHP目录下通常有php.ini-development和php.ini-production两个模板文件,如果你只是随便改了其中一个,但Apache没加载它,那所有配置都白搭。打开phpinfo()页面,找到Loaded Configuration File这一项,看显示的路径是不是你修改的那个ini文件。如果不是,去修改正确的那个文件,然后重启Apache。检查Apache配置里的PHPIniDir设置
确保Apache的httpd.conf文件里有指定PHP的配置目录,比如:PHPIniDir "C:/php"要是没加这一行,Apache可能找不到你设置的
extension_dir和扩展启用配置,自然加载不了mysqli。添加后记得重启Apache。确认PHP和Apache的位数完全匹配
这是另一个高频坑:如果你装的是64位Apache,那PHP必须也是64位的;32位Apache对应32位PHP。位数不匹配的话,就算dll文件存在,也根本加载不进去。去PHP和Apache的下载页面确认你下载的版本位数一致。查看Apache错误日志找具体原因
扩展加载失败通常会在Apache的错误日志里留下线索。去Apache安装目录的logs文件夹里找error.log(或者用Apache控制台看实时日志),搜索mysqli或者php_mysqli.dll,比如会看到类似Cannot load php_mysqli.dll into server的错误,后面可能会跟着具体原因(比如依赖缺失、文件损坏),根据提示针对性解决。安装对应版本的VC运行库
PHP7不同版本需要对应的VC运行库:PHP7.0-7.1需要VC14,PHP7.2及以上需要VC15/VC16。如果你的系统里没装对应的运行库,扩展会加载失败。去微软官网下载对应版本的VC Redistributable运行库安装,然后重启Apache试试。用命令行PHP验证扩展是否能加载
打开命令提示符,切换到PHP目录,运行php -m,看看输出的模块列表里有没有mysqli。如果命令行里能看到,但Apache的phpinfo里没有,说明问题出在Apache的配置或者权限上,比如Apache运行用户没有访问php_mysqli.dll的权限。检查文件权限
确保Apache的运行用户(通常是IUSR或者Network Service)对C:\php\ext\php_mysqli.dll文件有读取权限。右键这个dll文件,打开「属性」-「安全」选项卡,添加对应的用户并赋予读取权限,然后重启Apache。
内容的提问来源于stack exchange,提问作者Celia

