腾讯云 CentOS 下编译安装 pdo_mysql
环境: 腾讯云 CentOS
事情起因:升级了程序依赖,需要将原本 PHP 7.x 版本升级到 PHP 8.0 以上版本,其他库安装倒算顺利,唯独缺少了
pdo_mysql.so
模块,多此尝试未果,于是尝试自己编译,经历一番小波折终于完成,记录在案。
0 升级安装 php81( 之前已经 yum remove php74*
删除了低版本PHP)
0.1 首先查看相关包:
yum search php81
0.2 安装 PHP8.1以及相关扩展库:
yum install php81 php81-php-fpm php81-php-mysqlnd php81-php-pdo php81-php-gd php81-php-mbstring php81-php-xml php81-php-bcmath
0.3 生成软链接
ln -s /usr/bin/php81 /usr/bin/php
/usr/bin
若有之前版本 php,可先rm php
删除,再重新生成软链接
0.4 find / -name “*php-fpm.service”
查找 php-fpm 所在目录
cd /path/to/php81-php-fpm.service
systemctl start php81-php-fpm
systemctl enable php81-php-fpm
启动 php-fpm(若图方便易记此处亦可为其创建软链接), 如果不是找不到 pdo_mysql
扩展,至此算是完成升级 PHP 8.1。不过程序依赖于 pdo 驱动 mysql,只能继续。
如前所述
yum search
中找不到php81-php-pdo_mysql
,尝试各种解决方案,包括yum search php80
试图稍稍降级,依然没有 pdo_mysql 包, 一时 没有找到快速有效的办法,于是便跟随教程自己编译。这便有了下篇:
1. 首先官网下载了PHP8.1的源码包
wget https://www.php.net/distributions/php-8.1.6.tar.gz
2. 解压包
tar -zxvf php-8.1.6tar.gz
3. 0 因 PHP 8.1 的主包和其他扩展包已经通过 yum install
安装了,此处只需编译 pdo_mysql 扩展, 故进入扩展文件夹, 准备编译事项
cd php-8.1.6/ext/pdo_mysql
3.1 按照提示编译扩展需要先使用 phpize 命令生成编译的配置文件,于是查找获取 phpize 安装路径
whereis phpize
返回文件具体路径 /path/to/phpize
,在扩展源码目录下执行 phpize 命令:
/path/to/phpize
结果此处出现报错,提示缺少 php-devel 包云云,未顺利进行
查找相关包
yum search php-devel
查看到 php81-php-devel, 安装:
yum install php81-php-devel
3.2 再次执行 phpize 命令
/path/to/phpize
生成相关配置文件。
4. 配置编译项
./configure --prefix=/path/to/modules --with-pdo-mysql=/path/to/mysql --with-php-config=/where/is/php-config
- --prefix 编译后文件的所在目录,通过 `find / -name “*pdo.so”` 查找获得已安装的扩展所在位置,比如 /path/to/modules/pdo.so, 则取 /path/to/modules/ 作为 prefix
- --with-pdo-mysql 此处为 mysql 的文件路径, 可通过 `whereis mysql` 查找获得
- --with-php-config 指定安装 PHP 的时候的配置, whereis php-config 获取
完成配置
5. 1编译文件
make
结果此处又有一个小插曲,出现报错,大致意思是某个 for 语句的编译只支持 c99 。毕竟之前未作过编译,其实不太了解之中细节,一时无措。以有限的 C 方面的认知稍再细想,加以百度搜索,修改 makefile 相关配置得解
5.2 安装
make install
至此 pdo_mysql.so
出现在 PHP 扩展目录之下。
6.0 修改 php.ini
,启用 pdo_mysql 扩展
extension=pdo_mysql.so
此处可通过 `php --ini` 查看配置文件所在位置
6.1 重启 php-fpm
systemctl restart php81-php-fpm
打开网页验证一下,It works!