解决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

相关推荐
wangzhpwang10 小时前
Adminer 连接mssql sqlserver
mysql·sqlserver·php·dba·mssql
—Qeyser16 小时前
Laravle 证件照排版
php·laravel·证件照
PHP代码20 小时前
大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
php
农民也会写代码1 天前
织梦dedecms登录后台出现Safe Alert Request Error step 2
php·cms·dedecms·php二开
斯普信专业组1 天前
IP隧道技术中数据包头部的变化分析:必然增加的封装机制
网络·tcp/ip·php
叫我黎大侠2 天前
使用 LibreOffice 实现各种文档格式转换(支持任何开发语言调用 和 Linux + Windows 环境)[全网首发,保姆级教程,建议收藏]
java·大数据·linux·开发语言·python·c#·php
一米阳光zw2 天前
mac将自己网络暴露到公网
网络·macos·php
代码配咖啡2 天前
深度解析:SQLynx 如何筑牢数据库安全防线
开发语言·数据库·php
不惜年少枉少年2 天前
java Sm2SignWithSM3转php
android·java·php
王大爷~2 天前
php本地 curl 请求证书问题解决
开发语言·php