php7中开启curl的拓展,Windows 10 下php.ini中开启了curl和sqlite3等扩展之后,依然无法加载对应dll的问题...

在Windows下更新PHP版本到7之后,php.ini中开启了curl和sqlite3,但是依然无法使用对应的功能,例如 Uncaught Error: Call to undefined function curl_init(), Uncaught Error: Class 'SQLite3' not found,Uncaught PDOException: could not find driver,同时会在系统日志中出现了几个错误信息:

PHP Warning: PHP Startup: Unable to load dynamic library ‘curl’ (tried: /ext/curl找不到指定的模块

PHP Warning: PHP Startup: Unable to load dynamic library ‘pdo_sqlite’ (tried: ext/pdo_sqlite 找不到指定的模块

PHP Warning: PHP Startup: Unable to load dynamic library ‘sqlite3’ (tried: ext/sqlite3 (找不到指定的模块。),

系统信息

操作系统:Windows 10 x64

Apache:Apache 2.4 x64

PHP:PHP7.4 x64 Thread Safe

运行模式:PHP以模块形式被Apache加载,非FastCGI模式( FastCGI 这种模式,调用php-cgi.exe,不会有这种问题)

未经授权,请不要转载:http://www.youranshare.com

原因分析

Apache2.4加载了php7apache2_4.dll模块,但是对于进程而言,当其需要加载某些DLL的时候,会首先搜索exe所在目录,然后是系统PATH目录。

不幸的是,当使用模块加载的方式运行PHP的时候,当PHP需要加载例如php_curl.dll的时候,其需要依赖这个libssh2.dll,Apache会搜索自己的运行目录,然后和系统的PATH,如果没有找到,那么就不能正常加载php_curl.dll。

在解决方案之前的检查

请首先确保,在Windows下你已经正确的通过Apache调用了PHP模块,也就是你的Apache服务能够正常启动,如下代码使我的httpd.conf加载PHP的配置,请参考。

######### httpd.conf 加载 PHP7

# 定义一个PHP目录路径

Define PHP7ROOT "C:/PHP/PHP7.4"

#加载PHP模块

LoadModule php7_module "${PHP7ROOT}/php7apache2_4.dll"

# 如果PHP加载成功

# 指定 php.ini配置文件所在的目录

PHPIniDir "${PHP7ROOT}/"

AddHandler application/x-httpd-php .php

同时,在Windows下,php.ini中的的扩展目录设置,请使用绝对路径,否则可能会无法加载你的扩展

; Directory in which the loadable extensions (modules) reside.

; http://php.net/extension-dir

;extension_dir = "./"

; On windows:

extension_dir = "C:/PHP/PHP7.4/ext/"

解决方案1

该方法,是通过PATH环境变量的形式将PHP的所在目录加入到系统PATH中,因为libssh2.dll、libsqlite3.dll等这些dll在PHP根目录下,如图所示,是我添加的环境变量。

fdcb5eb89f8a34ca13f9676aafa3a33b.png添加PHP目录到环境变量

添加完成之后,请重启你的Apache服务,即可。

解决方案2

这种方案,是将所依赖的dll拷贝到Apache的bin目录中,博主这里使用了curl和sqlite3,那就只需要将PHP根目录下的libsqlite3.dll和libssh2.dll拷贝过去即可,如图所示。

d78ffadd68b05bc290260f69d92eeec2.png拷贝依赖dll

同样,在拷贝之后,请重启你的Apache服务。

解决方案2中的注意事项在PHP根目录中有好几个libxxx.dll文件,博主这里只测试了curl和sqlite的依赖,如果你并不知道你使用的PHP扩展依赖了哪些dll,这里建议就一股脑的使用PATH环境变量进行处理,毕竟实际线上项目上用模块形式加载PHP的不多,自己开发的时候就无所谓了。

扫码领个红包作为打赏吧~~

(余额宝支付时可抵现)

喜欢 (0)or分享 (0)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值