编程

腾讯云 CentOS 下编译安装 pdo_mysql

1687 2022-05-30 08:48:34

环境: 腾讯云 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!