编程

腾讯云CentOS下编译安装pdo_mysql

1116 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 因PHP8.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!