php8.0源码编译安装mysqli拓展
将开发环境web项目上传到CentOS8.0云服务器上后,调用PHP文件报500错误,经排查php环境中不存在mysqli拓展,导致无法使用mysqli_connect()函数;查看phpinfo()页面证实猜想;原因可能是yum安装PHP时默认无mysqli.so文件;
1 查看本地安装的php版本
php -v
2 php官网下载同本机php相同版本的压缩包
mkdir temp
cd temp
# 未找到8.0.20版本的
wget https://www.php.net/distributions/php-8.0.23.tar.gz
tar -zxvf php-8.0.23.tar.gz
cd php-8.0.23
3 安装 mysqli 依赖拓展mysqlnd (phpinfo()显示有此拓展时可跳过)
3.1 查询本地phpize命令文件路径
find / -name phpize
~~ /usr/bin/phpize
3.2 在ext文件夹中找到mysqlnd文件夹,并执行编译
cd ext/mysqlnd
/usr/bin/phpize
# 若上面命令报错误无config.m4文件,可执行:
# cp config9.m4 config.m4
./configure
make & make install
编译完成后如下(路径取决于第一步创建的temp文件夹路径):
3.3 将mysqlnd.so文件拷贝到php默认加载的module文件夹下
# yum安装的Apache2.4默认为 /usr/lib64/php/modules
cp /usr/lib64/php/modules/temp/php-8.0.23/ext/mysqlnd/modules/mysqlnd /usr/lib64/php/modules
4 安装mysqli拓展
cd ext/mysqli
/usr/bin/phpize
./configure
make & make install
cp /usr/lib64/php/modules/temp/php-8.0.23/ext/mysqlnd/modules/mysqli /usr/lib64/php/modules
5 配置php.ini
# yun直接安装的PHP配置文件php.ini存放在/etc/php.ini
vim /etc/php.ini
如图开启mysqli和mysqlnd拓展(mysqlnd必须需在mysqli前引入):
6 重启Apache
systemctl restart httpd
若phpinfo()中仍无法看到mysqli拓展,可按照下面步骤操作:
php -m
若控制台打印模块中有mysqli和mysqlnd,则继续执行:
ps -ef | grep "php"
kill 203419 systemctl restart httpd