2024年3月6日
Share

Ubuntu安装PHP8.2 编译安装 oci8 pdo_oci扩展

by

前言

本文copy自好友Starfish的博文

Ubuntu安装PHP8.2 编译安装 oci8 pdo_oci扩展 - 七彩鱼丸 - 博客园 (cnblogs.com)

PHP 8.2是PHP语言的最新版本。新特性包括,只读类,允许布尔值作为独立类型等。从mysqli中删除libmysql的支持等。

时至今天,主流的HTTP服务器已不是Apache,我们推荐使用Nginx作为HTTP服务器,Nginx相对于Apache来说简单且性能更好。

本教程将向您展示如何在Ubuntu 20.04安装PHP 8.2并将其与Nginx集成。在撰写本文时,默认的Ubuntu 20.04存储库包括PHP 7.4版本。

我们将从ondrej/php的PPA存储库中安装PHP。升级或安装PHP 8之前,请确保您的应用程序支持它。

OndřejSurý维护着一个包含多个PHP版本的存储库。请运行下面的命令安装PHP 8.2。

终端将会提示你是否继续的消息,Press [ENTER] to continue or Ctrl-c to cancel adding it.。按Enter键回车即可。

查看已安装的php版本


安装PHP扩展

PHP扩展是已编译的动态库,它扩展了PHP的核心功能。PHP扩展程序作为软件包提供,可以通过apt安装PHP扩展。

按照惯例PHP扩展的通常是以php开头,接着是版本号,然后是-和扩展名称。这是通用的格式 php8.2-[extname]

并不是所有php扩展都可以通过apt命令进行安装,Apt仓库仅提供常用PHP扩展,某些扩展可能需要自己手动编译。

例如,要安装MySQL和GD扩展,您可以运行命令 sudo apt install php8.2-mysql php8.2-gd

需要apt安装的扩展有:php8.2-mysql php8.2-mbstring php8.2-curl php8.2-redis php8.2-bcmath php8.2-soap php8.2-swoole

sudo apt install php8.2-mysql php8.2-mbstring php8.2-curl php8.2-redis php8.2-bcmath php8.2-soap php8.2-swoole
Bash

查看已安装的php扩展


准备oracle环境

oci8 pdo_oci需要手动编译安装 (划重点)

oracle客户端下载链接:Oracle Instant Client Downloads for Linux x86-64 (64-bit)

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

选择最新版本 version:21.13

基础包和sdk包都默认选的第一个

cd /usr/local/src
sudo wget https://download.oracle.com/otn_software/linux/instantclient/2113000/instantclient-basic-linux.x64-21.13.0.0.0dbru.zip
 
 
sudo wget https://download.oracle.com/otn_software/linux/instantclient/2113000/instantclient-sdk-linux.x64-21.13.0.0.0dbru.zip
sudo apt install unzip

unzip instantclient-basic-linux.x64-21.13.0.0.0dbru.zip
unzip instantclient-sdk-linux.x64-21.13.0.0.0dbru.zip
Bash

PHP源码编译安装扩展

官方github链接:

github.com/php/php-src/tree/php-8.2.15

下载:

wget https://github.com/php/php-src/archive/refs/tags/php-8.2.15.zip 
# 代理加速版本选其一
wget https://mirror.ghproxy.com/https://github.com/php/php-src/archive/refs/tags/php-8.2.15.zip


unzip php-8.2.15.zip
 
cd php-src-php-8.2.15/ext/oci8/
 
phpize
Bash

phpize命令报错了 需执行以下命令:

apt install php8.2-dev
Bash

再次执行phpize成功了


编译 oci8

./configure --with-oci8=instantclient,/usr/local/src/instantclient_21_13

make && make install
Bash

编译 pdo_oci

cd ../pdo_oci

phpize

./configure --with-pdo_oci=instantclient,/usr/local/src/instantclient_21_13

make && make install
Bash
vim /etc/php/8.2/cli/php.ini
Bash

测试扩展


 开启扩展 执行 php --ini 发现有报错了

问题:libnnz21.so: cannot open shared object file: No such file or directory

原因:libnnz21.so 没加载到

ldd /usr/lib/php/20220829/oci8.so
Bash
vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/src/instantclient_21_13:$LD_LIBRARY_PATH
Bash

libaio.so.1也没有加载到

apt-get install libaio1 libaio-dev
Bash

解决~

最后执行php -m 查看已安装的扩展 发现oci8和pdo_oci已成功安装,大功告成~

感叹一下:stackoverflow真好用