在 openEuler 22.03 (Kunpeng-920) 上编译部署 PHP 8.0 并整合达梦数据库扩展

前言

在国产化替代的浪潮中,openEuler 操作系统和鲲鹏处理器平台日益重要。本文将详细介绍如何在 openEuler 22.03 (Kunpeng-920 ARM架构) 环境中从源码编译 PHP 8.0,并整合国产达梦数据库扩展。

环境准备

首先更新系统并安装必要的编译工具:

sudo dnf update -y
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y wget vim

安装 PHP 编译依赖

sudo dnf install -y \
    libxml2-devel \
    libXpm-devel \
    openssl-devel \
    curl-devel \
    libjpeg-turbo-devel \
    libpng-devel \
    freetype-devel \
    oniguruma-devel \
    libzip-devel \
    sqlite-devel \
    bzip2-devel \
    readline-devel \
    libedit-devel \
    libffi-devel \
    pcre2-devel

编译安装 PHP 8.0

1. 下载并解压源码

cd /usr/local/src
sudo wget https://www.php.net/distributions/php-8.0.30.tar.gz
sudo tar -xzvf php-8.0.30.tar.gz
cd php-8.0.30

2. 创建 PHP-FPM 运行用户

sudo groupadd www
sudo useradd -g www www

3. 配置编译选项

./configure \
    --prefix=/usr/local/php8.0 \
    --with-config-file-path=/usr/local/php8.0/etc \
    --with-config-file-scan-dir=/usr/local/php8.0/etc/conf.d \
    --enable-fpm \
    --with-fpm-user=www \
    --with-fpm-group=www \
    --enable-mbstring \
    --enable-opcache \
    --with-curl \
    --with-libedit \
    --with-openssl \
    --with-zlib \
    --with-zip \
    --with-pear \
    --enable-mysqlnd \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-pdo-pgsql \
    --with-ffi \
    --with-freetype \
    --with-jpeg

4. 编译并安装

make -j$(nproc)
sudo make install

5. 配置 PHP

# 复制配置文件
sudo cp php.ini-production /usr/local/php8.0/etc/php.ini

# 配置 PHP-FPM
sudo cp /usr/local/php8.0/etc/php-fpm.conf.default /usr/local/php8.0/etc/php-fpm.conf
sudo cp /usr/local/php8.0/etc/php-fpm.d/www.conf.default /usr/local/php8.0/etc/php-fpm.d/www.conf

6. 创建 Systemd 服务

sudo vim /etc/systemd/system/php8.0-fpm.service

添加以下内容:

[Unit]
Description=The PHP 8.0 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php8.0/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8.0/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload
sudo systemctl start php8.0-fpm
sudo systemctl enable php8.0-fpm

7. 添加到环境变量

echo 'export PATH="/usr/local/php8.0/bin:/usr/local/php8.0/sbin:$PATH"' | sudo tee /etc/profile.d/php8.0.sh
source /etc/profile.d/php8.0.sh

整合达梦数据库扩展

1. 放置达梦扩展文件

将达梦扩展的 .so 文件放入 PHP 扩展目录,并重命名:

# 假设达梦扩展文件在当前目录
sudo cp libphp80_dm.so /usr/local/php8.0/lib/php/extensions/no-debug-non-zts-20200930/libphp_dm.so
sudo cp php80_pdo_dm.so /usr/local/php8.0/lib/php/extensions/no-debug-non-zts-20200930/php_pdo_dm.so

注意:扩展目录名称中的 20200930 是 PHP 8.0 的 API 版本号,请根据实际目录名调整。

2. 配置 php.ini 加载扩展

编辑 PHP 配置文件:

sudo vim /usr/local/php8.0/etc/php.ini

在文件末尾添加:

; 达梦数据库扩展
extension=libphp_dm
extension=php_pdo_dm

3. 解决依赖问题

达梦扩展需要加载达梦数据库的客户端库,如果遇到以下错误:

PHP Fatal error: Unable to start dm module in Unknown on line 0

需要配置系统库路径:

# 创建达梦库配置文件
sudo vim /etc/ld.so.conf.d/dm8.conf

添加达梦数据库的库路径(根据实际安装路径调整):

/opt/dmdbms/bin

或者如果达梦库文件在 /usr/local/dm/bin 目录:

/usr/local/dm/bin

更新库缓存:

sudo ldconfig

4. 验证安装

php -m | grep dm

应该能看到输出 dmpdo_dm,表示达梦扩展已成功加载。

完整测试脚本

创建一个测试脚本验证 PHP 和达梦扩展是否正常工作:

sudo vim /var/www/html/test_dm.php

内容如下:

<?php
// 显示 PHP 信息
phpinfo();

// 测试达梦扩展是否加载
if (extension_loaded('dm')) {
    echo "达梦扩展已加载成功!<br/>";
    
    // 尝试连接达梦数据库(根据实际情况修改连接参数)
    try {
        $conn = dm_connect("localhost", "SYSDBA", "SYSDBA");
        if ($conn) {
            echo "达梦数据库连接成功!";
            dm_close($conn);
        } else {
            echo "达梦数据库连接失败: " . dm_error();
        }
    } catch (Exception $e) {
        echo "连接异常: " . $e->getMessage();
    }
} else {
    echo "达梦扩展未加载!";
}
?>

通过浏览器访问该脚本或使用命令行测试:

php /var/www/html/test_dm.php

故障排除

  1. 扩展加载失败:检查 .so 文件路径和权限,确保文件存在于正确的扩展目录
  2. 依赖库问题:使用 ldd 命令检查扩展依赖关系:ldd /usr/local/php8.0/lib/php/extensions/no-debug-non-zts-20200930/libphp_dm.so
  3. 库路径问题:确保达梦数据库的库路径已正确添加到 /etc/ld.so.conf.d/ 并执行了 ldconfig

总结

通过以上步骤,我们成功在 openEuler 22.03 (Kunpeng-920) 平台上编译安装了 PHP 8.0,并整合了达梦数据库扩展。这种国产化环境的搭建对于推进信息技术应用创新产业具有重要意义。

关键要点:

  • 正确安装所有编译依赖库
  • 合理配置 PHP 编译参数
  • 正确处理达梦扩展的文件放置和重命名
  • 配置系统库路径以解决依赖问题
  • 通过测试脚本验证安装结果

这种环境可以为企业级应用提供稳定可靠的 PHP 运行环境,同时支持国产达梦数据库,符合当前国产化替代的技术路线要求。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐