解决windows下php8.x及以上版本,在Apache2.4中无法加载CURL扩展的问题
本文已首发于:秋码记录
若你也想搭建一个个人博客,可参考:国内 gitee.com Pages 下线了,致使众多站长纷纷改用 github、gitlab Pages 托管平台
在日新月异的信息化下,软件也在跟随着互联网的脚步,逐步推进着各项计划。
近些年,各大语言像是不约而同
的都在改进或优化,从而能让programmer
在开发效率上有所提升,还使得软件在升级了新版本的program language
加持下,运行速度和处理并发
的能力得到前所未有
的提升。
Java
自2014年
发布了新的里程碑
的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
,像Java
、C/C++
、Python
、golang
、C#
等)
下载 Apache
对于php7.4
及PHP 5
版本而言,可以下载Apache
历史版本。
Apache 历史版本
链接:https://www.apachelounge.com/download/additional/ 。
我们将下载下来的压缩包进行解压,打开其根路径下的conf
文件夹,用你常用的IDE
编辑httpd.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
配置大同小异
。
#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.x
,Apache
配置却不是什么php8_module
,而是php_module
。
#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 扩展的问题
其实,我们在Apache
的httpd.conf
配置文件里,已经通过LoadFile
的方式来加载dynamic library
,可是仍旧加载不了curl
这个扩展。
起先,我一度怀疑是不是需要将libssh2.dll
、libcrypto-3-x64.dll
、libssl-3-x64.dll
三个dynamic library
(现在我都会文章里适当的插入写英文,一方面是加深了我的单词的记忆,另一方面也能鞭策我不断的学习英语,不管你介不介意,反正我都加了。),拷贝到Apache
的bin
文件夹下或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
。