1. 准备 OpenSSL 1.1.1
PHP 7.4 编译时链接不了系统自带的 OpenSSL 3.x,需要先单独编译一份 OpenSSL 1.1.1。注意:老教程里 https://www.openssl.org/source/openssl-1.1.1i.tar.gz 这种直链已经 404,1.1.1 系列源码包统一归档在 source/old/1.1.1/ 目录下,直接用该系列的最终版本 1.1.1w 即可。整棵目录树统一放在 /usr/local/openssl-1.1.1w,后面 PHP 编译和 Composer 证书都复用它。
cd $HOME
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar xzf $HOME/openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
1. --prefix 与 --openssldir 指向同一棵目录树
./Configure --prefix=/usr/local/openssl-1.1.1w --openssldir=/usr/local/openssl-1.1.1w/ssl -fPIC -shared linux-x86_64
make -j 8
sudo make install
2. 安装 PHP 7.4
让 asdf 编译 PHP 时通过 PKG_CONFIG_PATH 链接上面这份 OpenSSL,再设置全局版本:
export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1w/lib/pkgconfig
asdf install php 7.4.33
asdf global php 7.4.33
php -v
装好 PHP 7.4.33 之后,Composer 访问 HTTPS 源会报证书错误,还需要补一步 CA 证书配置。
3. 修复 Composer 证书
下载 curl 官方的 CA 证书包,放进上面那棵 OpenSSL 目录树,并在 php.ini 中显式指定:
# 证书下载地址 https://curl.se/ca/cacert.pem
wget https://curl.se/ca/cacert.pem
1. 也可以在本机下载后手动上传到 Linux
mkdir -p /usr/local/openssl-1.1.1w/ssl/certs/
mv cacert.pem /usr/local/openssl-1.1.1w/ssl/certs/cacert.pem
echo "openssl.cafile=/usr/local/openssl-1.1.1w/ssl/certs/cacert.pem" >> $(asdf where php)/conf.d/php.ini
1. 再按官方安装器流程手动安装 Composer
bin_path=$(asdf where php)/bin
expected_signature=$(curl -sL https://composer.github.io/installer.sig)
$bin_path/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$bin_path/php -r "if (hash_file('sha384', 'composer-setup.php') === '${expected_signature}') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$bin_path/php composer-setup.php --install-dir=$bin_path --filename=composer
$bin_path/php -r "unlink('composer-setup.php');"
$bin_path/composer --version
1. Composer 是手动装进 PHP 目录的,需要刷新 shims 让 asdf 识别
asdf reshim
到这里,asdf 下的 PHP 7.4 和 Composer 就都配置好了。
延伸阅读
- asdf 安装 php8.1.31+redis+swoole——PHP 7.4 与 8.1 的安装差异
- PHP 环境搭建与工具链——PHP 环境搭建
相关文章
- 开发环境(asdf+docker)——开发环境(asdf+docker)
- asdf更新——asdf 更新方式
- PHP 环境搭建与工具链——PHP 环境搭建与工具链
asdf 系列