解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题

本文已首发于:秋码记录
若你也想搭建一个个人博客,可参考:国内 gitee.com Pages 下线了,致使众多站长纷纷改用 github、gitlab Pages 托管平台

在日新月异的信息化下,软件也在跟随着互联网的脚步,逐步推进着各项计划。

近些年,各大语言像是不约而同的都在改进或优化,从而能让programmer在开发效率上有所提升,还使得软件在升级了新版本的program language加持下,运行速度和处理并发的能力得到前所未有的提升。

Java2014年发布了新的里程碑Java 8版本号,之后,Oracle变向外界承诺每三年发布一个LTS(Long Time Support)长期支持版本,每年的三月份和九月份都发布一个版本。然而,java社区可不管java发布了多少个新版本,他们依旧是在使用Java 8版本。

直到Java 17的发布,且Oracle更改了协议,或许是促使开发者使用Java 17 LTS,由享誉全球Java 开发离不开Spring framework牵头,也就是Spring framework 6.x 及以上版本必须使用Java 17、而Springboot 3.x版本及后续版本也必须是Java 17,因为Srpingboot 3.x依赖的是Spring framework 6.x

php5.6.x版本后,也在响应着互联网的潮流,顺应当下瞬息万变的信息化,也在改进着、优化着,或许试图挽回曾今那句PHP是世界上最好的语言!而努力奋进。

即使我们没有使用PHP新版本的特性,只要你的软件运行在新版本的PHP下,性能那跟之前的,可就没的说了。(这里说的不单单只是PHP,像JavaC/C++PythongolangC#等)

下载 Apache

对于php7.4PHP 5版本而言,可以下载Apache历史版本。

Apache 历史版本链接:https://www.apachelounge.com/download/additional/

我们将下载下来的压缩包进行解压,打开其根路径下的conf文件夹,用你常用的IDE编辑httpd.conf文件。

conf 复制代码
#php5 support
LoadModule php5_module "D:/software/php-5.6.30/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
# configure the path of php ini
PHPIniDir "D:/software/php-5.6.30"

有时,你可能还需要开启URL重写模块

而对于PHP7.X版本,其实是与PHP5.X配置大同小异

conf 复制代码
#php7 support
LoadModule php7_module "D:/software/php-7.4.8/php7apache2_4.dll"
AddHandler application/x-httpd-php .php .html .htm
#configure the path to php.ini
PHPIniDir "D:/software/php-7.4.8"

#startup openssl
LoadFile "D:/software/php-7.4.8/libssh2.dll"
LoadFile "D:/software/php-7.4.8/libcrypto-1_1-x64.dll"
LoadFile "D:/software/php-7.4.8/libssl-1_1-x64.dll"

然而当你将使用了PHP8.xApache配置却不是什么php8_module,而是php_module

conf 复制代码
#php8 support
LoadModule php_module "D:/software/php-8.2.25/php8apache2_4.dll"
AddHandler application/x-httpd-php .php .html .htm
#configure the path to php.ini
PHPIniDir "D:/software/php-8.2.25"

#startup openssl curl
LoadFile "D:/software/php-8.2.25/libssh2.dll"
LoadFile "D:/software/php-8.2.25/libcrypto-3-x64.dll"
LoadFile "D:/software/php-8.2.25/libssl-3-x64.dll"

#this is not require ( my english is learning ...)
LoadFile "D:/software/php-8.2.25/libsodium.dll"

php.ini配置文件开启 curl 扩展

我们将下载下来的PHP二进制压缩包,进行解压后,打开它,在根目录下,拷贝php.ini-development一份在同路径下,并重命名为php.ini

PHP各个版本下载链接:https://windows.php.net/downloads/releases/archives/

修改PHP 扩展的目录。

根据自己项目的实际情况,开启相应的扩展,只需将分号去掉即可生效。

至于PHP7.X版本,开启扩展,与PHP5.X也都大抵相似,只是扩展名不再是像PHP5.X那般,而是extension=extension_name,例如CURL扩展则是extension=curl

然而,到了PHP8.X版本,想要开启curl扩展,总是在Apache下出现Unable to load dynamic library 'curl'的错误。

解决 php8.x 无法加载 curl 扩展的问题

其实,我们在Apachehttpd.conf配置文件里,已经通过LoadFile的方式来加载dynamic library,可是仍旧加载不了curl这个扩展。

起先,我一度怀疑是不是需要将libssh2.dlllibcrypto-3-x64.dlllibssl-3-x64.dll三个dynamic library(现在我都会文章里适当的插入写英文,一方面是加深了我的单词的记忆,另一方面也能鞭策我不断的学习英语,不管你介不介意,反正我都加了。),拷贝到Apachebin文件夹下或System32目录里呢?

然而,这个错误的想法,没过几秒钟,就被我抛之脑后了。之所以会有将那些文件复制到指定的目录内,那是网上都是这样千篇一律解决方案,如果它可行,我也是不推荐的!

同样是通过LoadFile方式来加载那些dynamic library,为什么PHP7.X却是可以load dynamic library 'curl'?而php8却出现了Unable to load dynamic library 'curl'的错误呢?

很显然,这不是出现在LoadFile这种加载方式上的错误,从而也就没有必要将那几个dynamic library拷贝到特定的位置上了。

那么,最后便是Apache版本加载不了PHP8.X版本的curl扩展了。

知道了这一点后,我们将再次打开Apache下载链接,下载最新的Apache

相关推荐
云游云记13 小时前
php Token 主流实现方案详解
开发语言·php·token
m0_7482299913 小时前
Laravel5.x核心特性全解析
开发语言·php
云游云记13 小时前
php 网络请求工具全解:cURL 与 Guzzle 总结
开发语言·网络·php
kdniao116 小时前
PHP 页面中如何实现根据快递单号查询物流轨迹?对接快递鸟在途监控 API 实操
android·开发语言·php
郑州光合科技余经理16 小时前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
码界奇点16 小时前
基于eBPF技术的高性能网络防火墙系统设计与实现
开发语言·网络·毕业设计·php·wpf·go语言·源代码管理
m0_7482299918 小时前
Laravel4.x核心更新全解析
开发语言·php
h7ml19 小时前
电商返利系统中佣金计算的幂等性保障与对账补偿机制实现
服务器·前端·php
北辰当尹20 小时前
【小迪安全2023】day43 php应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类
sql·安全·php
csdn_aspnet20 小时前
PHP常用算法解析:从Web开发到性能优化的实战
php