伏雨朝寒悉不胜,那能还傍杏花行。去年高摘斗轻盈。漫惹炉烟双袖紫,空将酒晕一衫青。人间何处问多情。 ———— 纳兰容若
之前换了BT面板,前几天有个东西需要用到PHP 发起HTTP2请求
代码如下:
if (curl_version()["features"] & CURL_VERSION_HTTP2 !== 0) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL =>$siteurlhttp2,
CURLOPT_HEADER =>true,
CURLOPT_NOBODY =>true,
CURLOPT_RETURNTRANSFER =>true,
CURLOPT_IPRESOLVE =>CURL_IPRESOLVE_V4,
CURLOPT_SSL_VERIFYPEER =>false,
CURLOPT_HTTP_VERSION =>CURL_HTTP_VERSION_2_0,
]);
$response = curl_exec($ch);
if ($response !== false && strpos($response, "HTTP/2") === 0) {
$http2=array("http2"=> "true");
} elseif ($response !== false) {
$http2=array("http2"=> "false");
} else {
echo curl_error($ch);
}
curl_close($ch);
} else {
$http2=array("http2"=> "client error");
}
从网上找的代码检测网址是否支持HTTP2访问的,我做了些优化调整,设置了CURLOPT_IPRESOLVE 参数为 CURL_IPRESOLVE_V4 来改进有IPv6 的系统打开网址的速度还有CURLOPT_NOBODY 就不要多说了。
这段代码 BT面板安装的环境下PHP运行时会报错,经过搜索发现是PHP curl不支持 HTTP2
于是网上搜索如果更新Curl 找了半天全是 yum 安装一个第三方的包去更新我还收到了我去年发的文章😂
具体方法不提了结果就是国内VPS下载这个第三方打包好的RPM包巨卡基本凉凉,我还是手动下载rpm包放到 yum的缓存目录下才完成安装。
安装后结果:shell 内 使用Curl -V
显示的是最新版但是php内并不会生效。
于是手动编译安装
wegt https://curl.haxx.se/download/curl-7.73.0.tar.gz && tar jxvf curl-7.73.0.tar.gz && cd curl-7.73.0
下载解压进入解压目录
然后
./configure --prefix=/usr/local --with-nghttp2=/usr/local --with-ssl
make && make install
你以为这样就结束了? 要这么顺利简单我就不写这个文章了 淦 下面问题来了
curl -V 命令查看版本都是OK的也支持HTTP php 内curl 版本就是不变还是老的版本(这块截图已丢失) 宝塔论坛别提了里面的东西没卵用,不逼逼叨了感觉形容当时的场景好费事.
最终解决方法的:
./configure --prefix=/usr/local/curl --with-nghttp2=/usr/local --with-ssl
make && make install
nghttp2 模块编译简单就不赘述了
网上教程辣鸡全尼玛都是 --prefix=/usr/local
路径不对导致php识别的还是老版本的curl
完事截图:
不要在意截图curl版本那会安装的时候还是curl-7.72.0
哥斯拉2021-04-05 11:23
感觉centos8相比7变化很大,我是被坑了,前些天被搞了一天。
以后准备换Debian了