
0.先把话说透什么是自主可控什么不是不忽悠 先拆穿一个概念陷阱。信创验收里自主可控不等于这软件是中国人写的。PHP 本身是开源软件不是国产软件——但开源意味着源码公开、你能完整审计每一行、你能自己编译、别人断供了你还能继续维护。这才 ✢是自主可控的准确含义可控的是供应链不是代码国籍。 所以真正要剥离的国外依赖按危险程度分三级 ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ┌────────────────┬─────────────────────────────────────────┬────────────────────────┬────────────────────────────┐ │──────级别──────│──────────────────例子───────────────────│───────为什么要剥───────│───────────怎么剥───────────│──── ├────────────────┼─────────────────────────────────────────┼────────────────────────┼────────────────────────────┤ │ │ 甲骨文 JDK、某些商业中间件、Win │ 不能审计、断供即停摆 │ 必须换掉 │ │ 闭源可能断供 │ 上的闭源库 │ │ │ ├────────────────┼─────────────────────────────────────────┼────────────────────────┼────────────────────────────┤ │ 开源但国内 │ OpenSSL换铜锁、MySQL换达梦/OceanB │ 可审计但存在合规/国密 │ 换国产等价物 │ │ 有替代 │ ase │ 缺口 │ │ ├────────────────┼─────────────────────────────────────────┼────────────────────────┼────────────────────────────┤ │ 开源且无国 │ glibc、gcc、PHP 源码本身 │ 可审计、无断供风险 │ 保留但要自编译、留源码、 │ │ 别敏感 │ │ │ 能出 SBOM │ └────────────────┴─────────────────────────────────────────┴────────────────────────┴────────────────────────────┘ 一句话结论你要做的不是把 PHP 重写成国产语言而是——国产CPU 上跑国产 OS用国产密码库和国产数据库PHP 及所有依赖全部源码自编译、可审计、有物料清单。这就是纯国产化 CPUOSPHP 运行时的闭环。---1.闭环发行版的总架构先看全景图 ┌─────────────────────────────────────────────────────┐ │ 第6层 应用你的 PHP 业务代码 │ ├─────────────────────────────────────────────────────┤ │ 第5层 PHP 运行时 │ │ php-fpm/php-cli扩展国产驱动 │ │ ├─ pdo_dm达梦 pdo_pgsql→金仓/openGauss │ │ ├─ pdo_mysql→OceanBase │ │ └─ gmssl/openssl→铜锁SM2/SM3/SM4 │ ├─────────────────────────────────────────────────────┤ │ 第4层 密码库铜锁 Tongsuo替代 OpenSSL │ │ SM2/SM3/SM4TLCP 国密协议 │ ├─────────────────────────────────────────────────────┤ │ 第3层 基础依赖库全部源码编译 │ │ zlib libxml2 libcurl oniguruma sqlite libzip …│ ├─────────────────────────────────────────────────────┤ │ 第2层 编译基座gcc 工具链国产软件源 │ ├─────────────────────────────────────────────────────┤ │ 第1层 国产 OSopenEuler/龙蜥/UOS/麒麟 │ ├─────────────────────────────────────────────────────┤ │ 第0层 国产 CPU龙芯/鲲鹏/飞腾/海光/兆芯 │ └─────────────────────────────────────────────────────┘ 大白话第0、1层决定跑在哪第2、3、4层决定用谁的零件第5层是PHP 本体第6层才是你的业务。闭环这六层全部来自国产或自编译没有任何一个零件是从国外拿来的黑盒。---2.第0层国产 CPU 选型先决定架构后面全跟着走 用 uname-m 看架构。不同架构适配难度天差地别 ┌──────────────────────────┬─────────────┬─────────────┬──────────────────────────────────────┐ │ CPU │ 架构 │ 适配难度 │ 说明 │ ├──────────────────────────┼─────────────┼─────────────┼──────────────────────────────────────┤ │ 海光 Hygon、兆芯 Zhaoxin │ x86_64 │ ⭐ 最简单 │ 与 Intel 二进制兼容现成包直接用 │ ├──────────────────────────┼─────────────┼─────────────┼──────────────────────────────────────┤ │ 鲲鹏920、飞腾 FT-2000│ aarch64 │ ⭐⭐ 中等 │ 生态成熟注意-marcharmv8-acrypto │ ├──────────────────────────┼─────────────┼─────────────┼──────────────────────────────────────┤ │ 龙芯3A5000/3A6000 │ loongarch64 │ ⭐⭐⭐ 最难 │ 全新架构很多包自己编JIT 无后端 │ └──────────────────────────┴─────────────┴─────────────┴──────────────────────────────────────┘ 大白话海光/兆芯最省事架构和 Intel 一样基本零改造鲲鹏/飞腾次之龙芯最难但也最纯国产代价是要自己编一堆依 赖。这一步定了第2~5层的编译参数全跟着变。后面的命令我以龙芯最难为主其他架构我会标注哪里可以简化。---3.第1层国产 OS 基座 ┌────────────────────┬───────────┬─────────┬───────────────────────┐ │ OS │ 血统 │ 包管理 │ 软件源换国内 │ ├────────────────────┼───────────┼─────────┼───────────────────────┤ │ openEuler 欧拉 │ RHEL 系 │ dnf/yum │ mirrors.openeuler.org │ ├────────────────────┼───────────┼─────────┼───────────────────────┤ │ 龙蜥 Anolis OS │ RHEL 系 │ dnf/yum │ mirrors.openanolis.cn │ ├────────────────────┼───────────┼─────────┼───────────────────────┤ │ 统信 UOS Server │ Debian 系 │ apt │ mirrors.uniontech.com │ ├────────────────────┼───────────┼─────────┼───────────────────────┤ │ 银河麒麟 Kylin V10 │ 多血统 │ yum/apt │ 官方源 │ └────────────────────┴───────────┴─────────┴───────────────────────┘ 大白话这四家都基于 Linux 内核衍生PHP 在上面跑没区别。关键动作是把软件源切到国内镜像否则 yum install 还是从国外源拉就违背闭环了。#openEuler 示例切国内源sudo sed-i s|repo.openeuler.org|mirrors.openeuler.org|g/etc/yum.repos.d/openEuler.repo sudo dnf makecache # 装编译基座麒麟 V10 用 yum 同理 sudo dnf install-y gcc gcc-cmake autoconf automake libtool \ bison re2c pkgconfig \ libxml2-devel openssl-devel libcurl-devel sqlite-devel \ oniguruma-devel libzip-devel bzip2-devel readline-devel \ libpng-devel libjpeg-devel freetype-devel unixODBC-devel 坑麒麟 V10 常缺 oniguruma-develPHP 的 mbstring 扩展依赖它。缺了要么自己源码编 oniguruma要么--disable-mbstring但 mbstring 几乎必用建议自编。---4.第2层编译基座把零件来源固定下来 这一层解决一个核心问题你编译 PHP 用的每一个库是从哪儿来的、哪个版本、能不能复现。 做法是建一个统一的源码目录安装前缀所有东西都从这里出 # 统一约定所有自编译库装到/opt/guochan保持路径一致exportPREFIX/opt/guochanexportBUILD$HOME/guochan-build mkdir-p $BUILD $PREFIX # 记录工具链版本SBOM 要用 gcc--version|head-1|tee $BUILD/toolchain.txt uname-m|tee $BUILD/arch.txt cat/etc/os-release|tee $BUILD/os-release.txt 大白话将来验收要你证明自主可控这三个文件就是第一份证据——什么CPU、什么 OS、什么编译器编的。---5.第3层国密库替代核心剥离点重点讲 这是整个闭环里最有技术含量、也最能体现剥离国外依赖的一步用国产 铜锁 Tongsuo原 BabaSSL已获国家密码管理局商用密码产品认证替换 OpenSSL。5.1为什么要换说给验收方听的 原生 OpenSSL 不认识 SM2/SM3/SM4也没法做国密 TLSTLCP 协议。2024Q3 起新建政务系统强制要求 SM2/SM3/SM4 全栈支持。所以不是换个牌子是功能缺口必须由铜锁补上。5.2编译铜锁完整命令 cd $BUILD git clone https://github.com/Tongsuo-Project/Tongsuo.gitcd Tongsuo git checkout8.4.0# 建议用稳定版 tag # 关键参数逐条解释./config \--prefix$PREFIX/tongsuo \--api3.0\ # API 兼容 OpenSSL3.0PHP8.1的 openssl 扩展认得它 enable-ntls \ # 【必须】国密 TLCP/NTLS 协议不开等于白装 enable-sm2 \ # SM2 非对称算法 enable-sm3 \ # SM3 摘要 enable-sm4 \ # SM4 对称加密-Wl,-rpath,$PREFIX/tongsuo/lib # 运行时能找到铜锁的.so make-j$(nproc)make install # 验证必须输出 Tongsuo 字样且确认是国密库路径而非系统 OpenSSL $PREFIX/tongsuo/bin/openssl version-a|grep-i tongsuo 大白话--api3.0是让铜锁伪装成 OpenSSL3.0的接口这样 PHP 的 openssl 扩展不用改代码就能链接上它。enable-ntls 是国密协议开关忘了开的话装完也只能当普通 OpenSSL 用SM2/SM3/SM4 用不了。5.3与系统 OpenSSL 共存关键坑 系统里已经有 OpenSSL 了直接替换会把系统一堆东西搞崩。正确做法是共存铜锁装到独立路径PHP 单独链接铜锁系统其他程序继续用系统 OpenSSL。 # 编译 PHP 时让 openssl 扩展指向铜锁./configure...\--with-openssl$PREFIX/tongsuo \...大白话一个系统里可以同时有系统 OpenSSL和铜锁两套密码库各管各的。PHP 指向铜锁ssh 等系统工具继续用 OpenSSL互不干扰。---6.第4层PHP 源码编译剥离国外依赖的完整 configure6.1编译 PHP 本体 cd $BUILD # 建议 PHP8.1/8.2/8.38.1起对国产架构支持较完整 curl-fsSL https://www.php.net/distributions/php-8.2.x.tar.gz -o php.tar.gztar xzf php.tar.gzcd php-8.2.x # 换新 config.guess龙芯必须见第2节 curl-o build/config.guess https://git.savannah.gnu.org/cgit/config.git/plain/config.guesscurl-o build/config.sub https://git.savannah.gnu.org/cgit/config.git/plain/config.sub./configure \--prefix/opt/guochan/php \--with-config-file-path/opt/guochan/php/etc \ \--enable-cli \--enable-fpm \--enable-opcache \--disable-opcache-jit \ # 龙芯必关无 JIT 后端鲲鹏/飞腾也可关避坑 \--enable-mbstring \--with-openssl$PREFIX/tongsuo \ # 【核心】密码库指向铜锁不是系统 OpenSSL--with-zlib$PREFIX \--with-libxml$PREFIX \--with-curl$PREFIX \ \--enable-pdo \--with-pdo-mysqlmysqlnd \ # OceanBase 走 MySQL 协议用自带 mysqlnd--with-mysqlimysqlnd \--with-pdo-pgsql$PREFIX \ # 金仓/openGauss 走 PG 协议--with-pdo-dblibno \ \--without-pear \--disable-cgi \--disable-phpdbg \ \ CFLAGS-O2 -g0make-j$(nproc)make install 大白话解释几个关键点---with-openssl$PREFIX/tongsuo这是整个剥离国外依赖最核心的一行。它让 PHP 的加密功能HTTPS、签名、密码哈希全部走铜锁而不是系统 OpenSSL。---with-pdo-mysqlmysqlndmysqlnd 是 PHP 自带的 MySQL 客户端驱动纯 PHP 内核实现不依赖任何外部 libmysqlclient——这本身就是一次去依赖。---disable-opcache-jit龙芯没有 JIT 后端上一份攻略讲过鲲鹏/飞腾上 JIT 也不稳关了最稳。6.2编译国密 PHP 扩展php-gmssl 除了让 openssl 走铜锁还可以装一个专门暴露 SM2/SM3/SM4 给 PHP 的扩展 cd $BUILD git clone https://gitee.com/openeuler-community/php-gmssl.gitcd php-gmssl $PREFIX/php/bin/phpize./configure--with-php-config$PREFIX/php/bin/php-config make-j$(nproc)make install#php.ini 里加载echoextensiongmssl.so/opt/guochan/php/etc/php.ini # 验证 SM2/SM3/SM4 可用 $PREFIX/php/bin/php-r echoSM3: .gmssl_sm3(hello).\n;echoSM4 密钥长度: .strlen(gmssl_sm4_keygen()).\n; 大白话gmssl 扩展把铜锁的 SM2/SM3/SM4 能力以 PHP 函数的形式暴露出来业务代码里直接gmssl_sm3()就能做国密摘要不用自己写 C 扩展。注意 SM2 密钥必须用 sm2p256v1 曲线生成别用默认的 prime256v1否则和其他国密系统互操作会失败。---7.第5层国产数据库驱动换掉 MySQL/Oracle ┌─────────────────────┬────────────┬──────────────────────────┬────────┐ │ 国产库 │ 兼容协议 │ PHP 怎么连 │ 难度 │ ├─────────────────────┼────────────┼──────────────────────────┼────────┤ │ OceanBase │ MySQL │ 直接用 PDO_MySQL零改造 │ ⭐ │ ├─────────────────────┼────────────┼──────────────────────────┼────────┤ │ 人大金仓 KingbaseES │ PostgreSQL │ 直接用 PDO_PGSQL │ ⭐ │ ├─────────────────────┼────────────┼──────────────────────────┼────────┤ │ openGauss/GaussDB │ PostgreSQL │ 直接用 PDO_PGSQL │ ⭐ │ ├─────────────────────┼────────────┼──────────────────────────┼────────┤ │ 达梦 DM8 │ 自研 │ 编官方 pdo_dm 扩展 │ ⭐⭐⭐ │ └─────────────────────┴────────────┴──────────────────────────┴────────┘7.1达梦最难重点讲 # 达梦官方在安装目录提供 PHP 驱动源码 # 假设达梦装在/opt/dmdbms cd/opt/dmdbms/drivers/php_pdo $PREFIX/php/bin/phpize./configure \--with-php-config$PREFIX/php/bin/php-config \--with-pdo-dm/opt/dmdbms make-j$(nproc)make install echoextensionpdo_dm.so/opt/guochan/php/etc/php.ini 大白话达梦是信创第一大库但它协议自研PHP 不能像连 MySQL 那样直接连得编达梦官方给的扩展。这是四个库里适配成本最高的。7.2通用适配建议三个库都适用?php// 1. 统一开客户端预处理模拟兼容国产库的 SQL 解析器$pdo-setAttribute(PDO::ATTR_EMULATE_PREPARES,true);// 2. BLOB 用流式读取避免大字段撑爆内存达梦尤其要$pdo-setAttribute(PDO::ATTR_STRINGIFY_FETCHES,false);// 3. 各库 DSN 差异换库只改这一行$dsnmatch($dbType){oceanbasemysql:host192.168.1.103;port2881;dbnametest;charsetutf8mb4,kingbasepgsql:host192.168.1.101;port54321;dbnametest,dmdm:host192.168.1.102;port5236;dbnametest,};大白话OceanBase 用户名特殊用户租户#集群 格式达梦用双引号大写字段名、默认用户 SYSDBA金仓用双引号、默认用户 system。这些差异建议封装一个 DB 抽象层换库只改配置不改业务代码。---8.第6层依赖审计SBOM证明剥离干净了 这是验收时最容易被问倒的一关。光说我换成了国产没用要拿出证据。方法两个ldd 看动态依赖SBOM 出物料清单。8.1用 ldd 审计每个二进制/扩展的动态依赖 #1.列出 PHP 所有扩展及其依赖的.soforext in/opt/guochan/php/lib/php/extensions/*/*.so; do echo $ext ldd $ext | grep -v linux-vdso\|ld-linux done # 2. 关键验证openssl.so 链接的必须是铜锁不是系统 OpenSSL ldd /opt/guochan/php/lib/php/extensions/*/openssl.so # 期望看到/opt/guochan/tongsuo/lib/libcrypto.so而不是/usr/lib/libcrypto.so #3.把结果归档成审计报告forext in/opt/guochan/php/lib/php/extensions/*/*.so; do echo ### $ext ldd $ext echo done $BUILD/dependency-audit.txt 大白话ldd 会列出每个 .so 依赖哪些动态库。你只要盯住一个点——openssl.s依赖的 libcrypto.so/libssl.so 路径必须指向 /opt/guochan/tongsuo/而不是系统 /usr/lib/。路径不对说明铜锁没链上前面白做。 8.2 生成 SBOM软件物料清单 SBOM 是国际通用的软件成分表格式有 CycloneDX 和 SPDX 两种。信创验收现在普遍要求。用 syft 工具生成 # 安装 syftSBOM 生成工具 curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin # 对 PHP 安装目录生成 CycloneDX 格式的 SBOM syft dir:/opt/guochan/php -o cyclonedx-json $BUILD/sbom-php.json syft dir:/opt/guochan/tongsuo -o cyclonedx-json $BUILD/sbom-tongsuo.json syft dir:/opt/guochan -o spdx-json $BUILD/sbom-full.json # 汇总成一份验收文档 cat $BUILD/toolchain.txt $BUILD/arch.txt $BUILD/os-release.txt \ $BUILD/dependency-audit.txt $BUILD/自主可控验收报告.txt 大白话SBOM 就是我这套 PHP 里到底有哪些组件、什么版本、谁提供的的一张清单。验收方扫一眼就知道密码库是铜锁国产 、数据库驱动是达梦国产、没有偷偷链接某个国外闭源库。 8.3 一张剥离对照表直接贴进验收报告 ┌────────────────┬──────────────────────────────┬───────────────────────────────┐ │ 原依赖国外 │ 替换后国产/自编 │ 验证命令 │ ├────────────────┼──────────────────────────────┼───────────────────────────────┤ │ OpenSSL │ 铜锁 TongsuoSM2/3/4TLCP │ ldd openssl.so 指向 tongsuo │ ├────────────────┼──────────────────────────────┼───────────────────────────────┤ │ MySQL │ OceanBaseMySQL 协议 │ DSN 改端口 2881 │ ├────────────────┼──────────────────────────────┼───────────────────────────────┤ │ Oracle/MySQL │ 达梦 DM8 / 金仓 │ pdo_dm / pdo_pgsql │ ├────────────────┼──────────────────────────────┼───────────────────────────────┤ │ 国外软件源 │ 国产镜像源 │ /etc/yum.repos.d 指向国产镜像 │ ├────────────────┼──────────────────────────────┼───────────────────────────────┤ │ 闭源商业依赖 │ 全开源自编译 │ SBOM 全量清单 │ └────────────────┴──────────────────────────────┴───────────────────────────────┘ --- 9. 第7层打包成发行版 前面所有东西编译完最后一步是把它们打成可复现、可分发、可签名的安装包。 9.1 打成 tar 包最简单 cd /opt/guochan tar czf $BUILD/guochan-php-runtime-$(uname -m).tar.gz php tongsuo # 记录校验和分发后验完整性 sha256sum $BUILD/guochan-php-runtime-*.tar.gz $BUILD/guochan-php-runtime.sha256 9.2 打成 RPMopenEuler/麒麟系 # 写一个 spec 文件把 /opt/guochan/php 打进 rpm cat $BUILD/guochan-php.spec EOF Name: guochan-php-runtime Version: 8.2 Release: 1%{?dist} Summary: 国产化 PHP 运行时铜锁国密 国产数据库驱动 License: PHP-3.01 Requires: glibc %description 纯国产化 PHP 运行时闭环发行版国产 CPU 国产 OS 铜锁国密 国产数据库驱动。 %install mkdir -p %{buildroot}/opt/guochan cp -a /opt/guochan/php %{buildroot}/opt/guochan/ cp -a /opt/guochan/tongsuo %{buildroot}/opt/guochan/ %files /opt/guochan/php /opt/guochan/tongsuo EOF rpmbuild -bb $BUILD/guochan-php.spec 9.3 签名国产 OS 上发布必须做 统信、麒麟上客户端产品发布上线强制要求签名 # 用国密 SM2 证书签名体现国密全栈 $PREFIX/tongsuo/bin/openssl smime -sign \ -in guochan-php-runtime.tar.gz \ -signer sm2_sign_cert.pem -inkey sm2_sign_key.pem \ -outform DER -out guochan-php-runtime.tar.gz.sig 大白话签名让下游拿到包之后能验证这确实是你发的、没被篡改。用 SM2 国密证书签名又给国密全栈加了一分。 --- 10. 完整流程总脚本从零到发行版一条龙 #!/usr/bin/env bash set -euo pipefail # 环境约定 export PREFIX/opt/guochan export BUILD$HOME/guochan-build mkdir -p $BUILD $PREFIX # 第2层记录基座 gcc --version | head -1 $BUILD/toolchain.txt uname -m $BUILD/arch.txt cat /etc/os-release $BUILD/os-release.txt # 第3层铜锁 cd $BUILD [ -d Tongsuo ] || git clone https://github.com/Tongsuo-Project/Tongsuo.git cd Tongsuo git checkout 8.4.0 ./config --prefix$PREFIX/tongsuo --api3.0 \ enable-ntls enable-sm2 enable-sm3 enable-sm4 \ -Wl,-rpath,$PREFIX/tongsuo/lib make -j$(nproc) make install # 第4层PHP cd $BUILD curl -fsSL https://www.php.net/distributions/php-8.2.16.tar.gz -o php.tar.gz tar xzf php.tar.gz cd php-8.2.16 curl -o build/config.guess https://git.savannah.gnu.org/cgit/config.git/plain/config.guess curl -o build/config.sub https://git.savannah.gnu.org/cgit/config.git/plain/config.sub ./configure \ --prefix$PREFIX/php --with-config-file-path$PREFIX/php/etc \ --enable-cli --enable-fpm --enable-opcache --disable-opcache-jit \ --enable-mbstring \ --with-openssl$PREFIX/tongsuo \ --with-zlib$PREFIX --with-libxml$PREFIX --with-curl$PREFIX \ --enable-pdo --with-pdo-mysqlmysqlnd --with-mysqlimysqlnd \ --with-pdo-pgsql$PREFIX \ --without-pear --disable-cgi --disable-phpdbg \ CFLAGS-O2 -g0 make -j$(nproc) make install # 第4.5层国密扩展 cd $BUILD [ -d php-gmssl ] || git clone https://gitee.com/openeuler-community/php-gmssl.git cd php-gmssl $PREFIX/php/bin/phpize ./configure --with-php-config$PREFIX/php/bin/php-config make -j$(nproc) make install echo extensiongmssl.so $PREFIX/php/etc/php.ini # 第6层审计 SBOM for ext in $PREFIX/php/lib/php/extensions/*/*.so;doecho### $ext;ldd$ext;echo done$BUILD/dependency-audit.txt curl-sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/binsyft dir:$PREFIX-o spdx-json$BUILD/sbom-full.json cat $BUILD/toolchain.txt $BUILD/arch.txt $BUILD/os-release.txt \ $BUILD/dependency-audit.txt$BUILD/自主可控验收报告.txt #第7层打包cd $PREFIX tar czf $BUILD/guochan-php-runtime-$(uname-m).tar.gz php tongsuo sha256sum $BUILD/guochan-php-runtime-*.tar.gz$BUILD/guochan-php-runtime.sha256 echo 闭环构建完成产物清单 ls-la $BUILD/*.tar.gz $BUILD/*.sha256 $BUILD/*.json $BUILD/*.txt --- 11. 常见坑速查 ┌────────────────────────┬────────────────────────────────────────────────────────┐ │ 坑 │ 解法 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 铜锁编完但 PHP 没链上 │ ldd openssl.so 检查路径必须指向 /opt/guochan/tongsuo │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ SM2 互操作失败 │ 密钥必须用 sm2p256v1 曲线生成 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 麒麟缺 oniguruma-devel │ 自己源码编 oniguruma或换 openEuler │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 龙芯 config.guess 报错 │ 换 GNU config 最新版 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 达梦连不上 │ 检查默认端口 5236、用户 SYSDBADSN 用 dm: 前缀 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ OceanBase 用户名错 │ 格式是 用户租户#集群不是普通用户名 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ JIT 崩溃 │ 龙芯/部分 ARM 上 --disable-opcache-jit │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 忘开 enable-ntls │ 铜锁等于白装国密握手用不了必须重编 │ ├────────────────────────┼────────────────────────────────────────────────────────┤ │ 龙芯高版本 GLibc 断层 │ 区分高/低 GLibc 环境编译和部署要同一 GLibc │ └────────────────────────┴────────────────────────────────────────────────────────┘ --- 12. 收尾这份闭环的诚实边界 最后再说一句实在话。这套方案做到的是信创语境下真实可达的自主可控 - ✅ CPU 国产、OS 国产、密码库国产、数据库国产、软件源国产 - ✅ PHP 及所有依赖源码自编译、路径可审计、有 SBOM、可签名分发 - ⚠️PHP 本体仍是开源软件不是国产软件但源码公开可审计属于可控而非闭源黑盒 - ❌ 没有做到、也不建议追求的是连 gcc/glibc/PHP 全部重写一遍——那不叫自主可控叫重复造轮子且质量必然不如成熟开源。 验收时把这四句话说清楚比任何全栈国产的口号都更有说服力。 --- 来源国产 OS/CPU 适配、国产数据库驱动、铜锁国密编译的出处 - PHP 信创国产化环境适配与优化全解CPU 难度分级、OS 编译、达梦/金仓/ODBC (https://blog.csdn.net/qq_37805832/article/details/162100366) - PHP Dockerfile 国产化重构鲲鹏/飞腾/海光交叉编译 SBOM 模板 (https://blog.csdn.net/iterloom/article/details/160627905) - PHP 容器化适配国产化SM2/3/4 全栈 麒麟 V10 基线 容器签名 (https://blog.csdn.net/pixelwander/article/details/159982150) - PHP 低代码表单引擎信创适配全图谱国产数据库/中间件兼容矩阵 (https://blog.csdn.net/LogicGap/article/details/160768140) - 铜锁 Tongsuo 源码编译enable-ntls、--api、符号前缀共存 (https://tongsuo.netlify.app/docs/compilation/source-compilation/) - 铜锁与其他 OpenSSL 版本库共存方案 (https://tongsuo.netlify.app/docs/compilation/openssl-compatible/) - 国密 SM2/SM3/SM4 双证书通道配置 (https://www.php.cn/faq/2563435.html) - PHP 8.1LaravelTiDB 容器化部署源码编译国密 SM4 扩展 (http://cnnetsun.cn/a/1786677)