如何从Azure PHP8 Web应用连接Oracle Database 12C?
Azure Web App PHP8 连接Oracle 12C 配置指引
你提到的旧版文档仅适配PHP5.6版本,PHP8需搭配3.2及以上版本的oci8扩展,对应Oracle Instant Client 19c LTS版本即可向下兼容Oracle 12C,以下是分环境的配置步骤:
Windows 平台 Azure Web App 配置步骤
- 准备适配的安装包
- Oracle Instant Client 19.18 x64 基础包(所有dll文件)
- 对应PHP子版本的oci8扩展包:PHP8.0选oci8 3.2.1,PHP8.1/8.2选oci8 3.3.0,需匹配x64架构和线程安全(TS/NTS)属性,获取
php_oci8.dll、php_pdo_oci.dll两个扩展文件
- 上传文件到Web App
进入Kudu控制台,在site目录下新建ext文件夹,将所有Instant Client的dll文件、两个扩展文件全部上传到该目录 - 配置生效规则
进入Azure门户Web App的「配置」-「应用程序设置」,新增两个配置项:- 键为
PHP_INI_SCAN_DIR,值为D:\home\site\ext - 键为
PATH,值为D:\home\site\ext;%PATH%,需将该路径放在PATH变量最前优先加载
再在site/ext目录下新建php.ini文件,写入如下内容:
extension=php_oci8.dll extension=php_pdo_oci.dll - 键为
- 验证配置
重启Web App后,新建phpinfo页面搜索oci8,存在扩展信息即说明安装成功。连接测试代码参考:<?php $tns = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 你的Oracle主机地址)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = 你的Oracle服务名)))"; $conn = oci_connect('数据库用户名', '数据库密码', $tns); if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } echo "Oracle数据库连接成功"; oci_close($conn); ?>
Linux 平台 Azure Web App 配置步骤
Linux环境需使用自定义容器部署,参考Dockerfile如下:
FROM php:8.2-apache # 安装系统依赖 RUN apt-get update && apt-get install -y libaio1 unzip # 提前将下载好的Oracle Instant Client 19.18 x64基础包放到项目根目录 COPY instantclient-basic-linux.x64-19.18.0.0.0dbru.zip /tmp RUN unzip /tmp/instantclient-basic-linux.x64-19.18.0.0.0dbru.zip -d /usr/local/ \ && ln -s /usr/local/instantclient_19_18 /usr/local/instantclient \ && echo '/usr/local/instantclient' > /etc/ld.so.conf.d/oracle-instantclient.conf \ && ldconfig # 编译安装oci8、pdo_oci扩展 RUN docker-php-ext-configure oci8 --with-oci8=instantclient,/usr/local/instantclient \ && docker-php-ext-install oci8 pdo_oci
将自定义容器镜像推送到容器注册表后,在Azure Web App部署时选择对应镜像即可,验证逻辑和Windows环境一致。
内容的提问来源于stack exchange,提问作者Pand005
相关产品推荐
相关产品推荐

