当前位置: 首页 > news >正文

统信UOS/麒麟系统下PHP源码编译安装与信创环境环境搭建手册=php信创

一、搞清楚你的环境(必看) 在开始之前,先搞清楚自己是什么系统、什么架构,后面的命令才能选对。# 查系统版本cat/etc/os-release# 查 CPU 架构(重要!)uname-m# 输出 x86_64 → 普通 Intel/AMD 处理器# 输出 aarch64 → ARM64(鲲鹏/飞腾/龙芯等信创处理器)# 查内核版本uname-r# 查内存和 CPU 核数(后面编译用)nproc# CPU 核数free-h# 内存大小系统和包管理器对应关系: ┌──────────────────┬─────────────────┬────────────┐ │ 系统 │ 版本 │ 包管理器 │ ├──────────────────┼─────────────────┼────────────┤ │ 统信UOS 桌面版 │ V20 │apt│ ├──────────────────┼─────────────────┼────────────┤ │ 统信UOS 服务器版 │ V20 │apt│ ├──────────────────┼─────────────────┼────────────┤ │ 麒麟 Kylin │ V10 桌面/服务器 │apt或 yum │ ├──────────────────┼─────────────────┼────────────┤ │ 麒麟 Kylin │ V4 │ yum │ └──────────────────┴─────────────────┴────────────┘# 判断用哪个包管理器whichapt# 有输出就用 aptwhichyum# 有输出就用 yumwhichdnf# 有输出就用 dnf(新版麒麟)--- 二、系统准备2.1配置软件源(信创系统经常需要手动配)# ===== 统信UOS 配置软件源 =====# 备份原有源cp/etc/apt/sources.list /etc/apt/sources.list.bak# 统信UOS 官方源(根据实际版本调整)cat>/etc/apt/sources.list<<'EOF'deb[by-hash=force]https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free deb[by-hash=force]https://professional-packages.chinauos.com/desktop-professional eagle/sp3 main contrib non-free EOF# 更新源aptupdate# ===== 麒麟 Kylin V10 配置软件源(apt版)=====cat>/etc/apt/sources.list<<'EOF'deb http://archive.kylinos.cn/kylin/KYLIN-ALL10.1main restricted universe multiverse EOFaptupdate# ===== 麒麟 Kylin V10 配置软件源(yum版)=====# 查看现有 repo 文件ls/etc/yum.repos.d/# 如果没有可用源,手动添加cat>/etc/yum.repos.d/kylin.repo<<'EOF'[kylin-base]name=Kylin Linux Basebaseurl=http://archive.kylinos.cn/yum/v10/enabled=1gpgcheck=0EOF yum makecache2.2安装编译工具链# ===== apt 系统(统信UOS / 麒麟apt版)=====aptupdate&&aptupgrade-y# 编译必须的工具aptinstall-y\build-essential\# gcc g++ make 等基础编译工具gcc\g++\make\cmake\autoconf\# 自动配置工具automake\libtool\pkg-config\# 库路径查找工具bison\# PHP 语法解析器生成工具(必须)re2c\# PHP 词法分析器生成工具(必须)wget\curl\git\vim\unzip# ===== yum/dnf 系统(麒麟yum版)=====yum update-y# 安装开发工具组(一次装好所有编译工具)yum groupinstall-y"Development Tools"# 额外必须的工具yuminstall-y\gcc\gcc-c++\make\cmake\autoconf\automake\libtool\pkgconfig\bison\re2c\wget\curl\git\vim\unzip--- 三、安装 PHP 编译依赖库 大白话:PHP 有很多功能(图片处理、加密、数据库连接等),每个功能都需要对应的系统库。编译前必须把这些库的"开发版本"(带-dev-devel后缀)装好。3.1apt系统(统信UOS / 麒麟apt版)aptinstall-y\# ===== XML 支持(PHP 必须)=====libxml2-dev\# ===== SSL/HTTPS 支持 =====libssl-dev\openssl\# ===== cURL 支持(HTTP请求)=====libcurl4-openssl-dev\# ===== 图片处理 =====libjpeg-dev\# JPEG 图片libpng-dev\# PNG 图片libwebp-dev\# WebP 图片libfreetype6-dev\# 字体渲染(验证码等)libavif-dev\# AVIF 图片(PHP 8.1+)# ===== 数据库 =====libmysqlclient-dev\# MySQL 客户端库default-libmysqlclient-dev\libsqlite3-dev\# SQLite# ===== 字符串处理 =====libonig-dev\# 多字节字符串(mbstring 必须)# ===== 压缩 =====zlib1g-dev\# zlib 压缩libzip-dev\# ZIP 文件支持libbz2-dev\# BZ2 压缩# ===== 加密 =====libsodium-dev\# 现代加密库libargon2-dev\# 密码哈希# ===== 其他 =====libreadline-dev\# 命令行编辑libedit-dev\libgmp-dev\# 大数运算libldap2-dev\# LDAP 认证libpq-dev\# PostgreSQLlibxslt1-dev\# XSLT 转换libgd-dev# GD 图形库(备用)3.2yum/dnf 系统(麒麟yum版) yuminstall-y\# ===== XML 支持 =====libxml2-devel\# ===== SSL/HTTPS =====openssl-devel\openssl\# ===== cURL =====libcurl-devel\# ===== 图片处理 =====libjpeg-turbo-devel\libpng-devel\libwebp-devel\freetype-devel\# ===== 数据库 =====mysql-devel\mariadb-devel\sqlite-devel\# ===== 字符串 =====oniguruma-devel\# ===== 压缩 =====zlib-devel\libzip-devel\bzip2-devel\# ===== 加密 =====libsodium-devel\# ===== 其他 =====readline-devel\gmp-devel\openldap-devel\postgresql-devel\libxslt-devel\gd-devel3.3验证关键库是否安装成功# 检查库是否存在(以 openssl 为例)pkg-config--existsopenssl&&echo"openssl: OK"||echo"openssl: 缺失"pkg-config--existslibcurl&&echo"curl: OK"||echo"curl: 缺失"pkg-config--existsoniguruma&&echo"oniguruma: OK"||echo"oniguruma: 缺失"pkg-config--existslibzip&&echo"libzip: OK"||echo"libzip: 缺失"# 查找库文件位置ldconfig-p|greplibssl ldconfig-p|greplibmysqlclient --- 四、下载 PHP 源码# 创建工作目录mkdir-p/opt/php-buildcd/opt/php-build# ===== 方法1:从官网下载(需要能访问外网)=====PHP_VERSION="8.3.7"wgethttps://www.php.net/distributions/php-${PHP_VERSION}.tar.gz# ===== 方法2:从国内镜像下载(推荐,速度快)=====# 清华镜像wgethttps://mirrors.tuna.tsinghua.edu.cn/php/php-${PHP_VERSION}.tar.gz# 解压tar-xzfphp-${PHP_VERSION}.tar.gzcdphp-${PHP_VERSION}# 查看目录结构(了解一下)ls# 重要目录:# configure → 配置脚本(我们要运行这个)# ext/ → PHP 扩展源码# sapi/ → PHP 运行模式(fpm、cli等)# Zend/ → PHP 引擎核心--- 五、配置编译选项(最关键的一步) 大白话:./configure 就是告诉编译器"我要哪些功能、装到哪里"5.1x86_64 架构配置(统信UOS x86版 / 麒麟x86版)cd/opt/php-build/php-8.3.7 ./configure\--prefix=/usr/local/php\# PHP 安装到这个目录--with-config-file-path=/usr/local/php/etc\# php.ini 放这里--with-config-file-scan-dir=/usr/local/php/etc/php.d\# 额外配置目录# ===== 运行模式 =====--enable-fpm\# 开启 PHP-FPM(Web服务必须)--with-fpm-user=www\# PHP-FPM 运行用户--with-fpm-group=www\# PHP-FPM 运行组--enable-cli\# 命令行模式# ===== 字符串和编码 =====--enable-mbstring\# 多字节字符串(中文必须)--with-iconv\# 字符编码转换# ===== 网络和加密 =====--with-openssl\# SSL/HTTPS 支持--with-curl\# cURL HTTP 请求--enable-sockets\# Socket 支持# ===== 数据库 =====--with-pdo-mysql\# PDO MySQL(推荐方式)--with-mysqli\# MySQLi 扩展--with-pdo-sqlite\# PDO SQLite--with-sqlite3\# SQLite3# ===== 图片处理 =====--enable-gd\# GD 图形库--with-freetype\# 字体支持--with-jpeg\# JPEG 支持--with-webp\# WebP 支持# ===== 压缩 =====--with-zlib\# zlib 压缩--enable-zip\# ZIP 文件--with-bz2\# BZ2 压缩# ===== 性能优化 =====--enable-opcache\# OPcache 字节码缓存(必须开)--enable-pcntl\# 进程控制(Swoole等需要)--enable-posix\# POSIX 函数# ===== 其他常用 =====--enable-bcmath\# 高精度数学--enable-calendar\# 日历函数--with-gmp\# 大数运算--enable-exif\# 图片EXIF信息--with-sodium\# 现代加密--with-password-argon2\# 密码哈希--enable-intl\# 国际化--with-readline\# 命令行编辑# ===== 编译优化 =====--disable-debug\# 关闭调试(生产环境)--disable-rpath# 不硬编码库路径5.2ARM64/aarch64 架构配置(鲲鹏/飞腾/麒麟ARM版)# ARM64 需要额外设置编译器标志exportCC="gcc"exportCXX="g++"# ARM64 优化编译标志# -march=armv8-a → 针对 ARMv8 架构优化# -O2 → 二级优化(速度和大小平衡)# -pipe → 用管道代替临时文件,加快编译exportCFLAGS="-O2 -pipe -march=armv8-a"exportCXXFLAGS="-O2 -pipe -march=armv8-a"# 鲲鹏处理器可以用更激进的优化# export CFLAGS="-O3 -pipe -march=armv8.2-a+crypto+fp16+rcpc+dotprod"./configure\--prefix=/usr/local/php\--with-config-file-path=/usr/local/php/etc\--with-config-file-scan-dir=/usr/local/php/etc/php.d\# ===== ARM64 专用:指定目标架构 =====--host=aarch64-linux-gnu\--build=aarch64-linux-gnu\# ===== 运行模式 =====--enable-fpm\--with-fpm-user=www\--with-fpm-group=www\--enable-cli\# ===== 字符串和编码 =====--enable-mbstring\--with-iconv\# ===== 网络和加密 =====--with-openssl\--with-curl\--enable-sockets\# ===== 数据库 =====--with-pdo-mysql\--with-mysqli\--with-pdo-sqlite\--with-sqlite3\# ===== 图片处理 =====--enable-gd\--with-freetype\--with-jpeg\--with-webp\# ===== 压缩 =====--with-zlib\--enable-zip\--with-bz2\# ===== 性能优化 =====--enable-opcache\--enable-pcntl\--enable-posix\# ===== 其他 =====--enable-bcmath\--enable-calendar\--with-gmp\--enable-exif\--with-sodium\--with-password-argon2\--enable-intl\--with-readline\# ===== 编译优化 =====--disable-debug\--disable-rpath5.3configure 常见报错和解决方法# ===== 报错1:configure: error: Cannot find OpenSSL =====# 原因:openssl 开发库没装aptinstall-ylibssl-dev# apt 系统yuminstall-yopenssl-devel# yum 系统# 如果装了还报错,手动指定路径:--with-openssl=/usr/local/openssl# ===== 报错2:configure: error: oniguruma not found =====# 原因:mbstring 依赖的 oniguruma 库没装aptinstall-ylibonig-dev yuminstall-yoniguruma-devel# ===== 报错3:configure: error: Please reinstall the libzip =====aptinstall-ylibzip-dev yuminstall-ylibzip-devel# 如果版本太旧,需要手动编译 libzip:cd/tmpwgethttps://libzip.org/download/libzip-1.10.1.tar.gztarxzf libzip-1.10.1.tar.gz&&cdlibzip-1.10.1mkdirbuild&&cdbuild cmake..-DCMAKE_INSTALL_PREFIX=/usr/localmake-j$(nproc)&&makeinstall# 然后告诉 pkg-config 去哪找exportPKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"# ===== 报错4:configure: error: Cannot find libmysqlclient =====aptinstall-ydefault-libmysqlclient-dev yuminstall-ymysql-devel mariadb-devel# ===== 报错5:ARM64 报 "unsupported architecture" =====# 确认 gcc 支持 aarch64gcc-v2>&1|grepTarget# 应该输出: Target: aarch64-linux-gnu# 如果不对,安装交叉编译工具aptinstall-ygcc-aarch64-linux-gnu# ===== 报错6:bison 版本太低 =====bison--version# 需要 3.0+# 如果版本太低,手动安装:cd/tmpwgethttps://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.gztarxzf bison-3.8.2.tar.gz&&cdbison-3.8.2 ./configure--prefix=/usr/localmake-j$(nproc)&&makeinstallexportPATH="/usr/local/bin:$PATH"--- 六、编译和安装cd/opt/php-build/php-8.3.7# ===== 第一步:编译 =====# -j$(nproc) 表示用所有 CPU 核并行编译,速度更快# 大白话:nproc 输出你有几个核,比如 8 核就是 make -j8make-j$(nproc)# 编译过程大概需要 5~20 分钟,取决于机器性能# 看到最后输出 "Build complete." 就成功了# 如果编译报错,先清理再重来:# make clean → 清理编译产物# make distclean → 彻底清理(连 configure 结果也清)# ===== 第二步:安装 =====makeinstall# 安装完成后检查ls/usr/local/php/# 应该看到: bin/ etc/ include/ lib/ sbin/ var//usr/local/php/bin/php-v# 应该输出 PHP 8.3.7 (cli) ...# ===== 第三步:配置环境变量 =====# 让系统能直接用 php 命令,不用写完整路径# 方法1:软链接(简单直接)ln-sf/usr/local/php/bin/php /usr/local/bin/phpln-sf/usr/local/php/bin/phpize /usr/local/bin/phpizeln-sf/usr/local/php/bin/php-config /usr/local/bin/php-configln-sf/usr/local/php/sbin/php-fpm /usr/local/sbin/php-fpm# 方法2:写入 PATH(推荐)echo'export PATH="/usr/local/php/bin:/usr/local/php/sbin:$PATH"'>>/etc/profilesource/etc/profile# 验证php-vwhichphp# 应该输出 /usr/local/bin/php 或 /usr/local/php/bin/php--- 七、配置 PHP7.1创建 php.ini# PHP 源码包里有两个模板ls/opt/php-build/php-8.3.7/# php.ini-development → 开发环境模板(显示错误)# php.ini-production → 生产环境模板(隐藏错误)# 创建配置目录mkdir-p/usr/local/php/etc/php.d# 复制生产环境模板cp/opt/php-build/php-8.3.7/php.ini-production /usr/local/php/etc/php.ini# 编辑配置vim/usr/local/php/etc/php.ini;=====/usr/local/php/etc/php.ini=====[PHP];=====基础设置=====;内存限制(根据服务器内存调整) memory_limit=256M;最大执行时间(秒) max_execution_time=300;最大输入时间 max_input_time=300;上传文件大小限制 upload_max_filesize=100M post_max_size=100M;最多上传几个文件 max_file_uploads=20;=====错误处理(生产环境)=====;不在页面显示错误(安全) display_errors=Off display_startup_errors=Off;记录错误到日志 log_errors=On error_log=/var/log/php/php_errors.log;错误级别(记录所有错误) error_reporting=E_ALL&~E_DEPRECATED&~E_STRICT;=====时区(必须设置,否则时间函数报警告)=====date.timezone=Asia/Shanghai;=====字符编码=====default_charset="UTF-8"mbstring.internal_encoding=UTF-8 mbstring.language=Chinese;=====Session=====session.save_path=/tmp/php_sessions session.gc_maxlifetime=1440session.cookie_httponly=1session.cookie_secure=0;HTTPS 环境改为1;=====安全设置=====;禁用危险函数(根据需要调整) disable_functions=exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source;隐藏 PHP 版本信息 expose_php=Off;=====文件路径=====;扩展目录 extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20230831"[opcache];=====OPcache 配置(必须开启,性能提升30~50%)=====opcache.enable=1opcache.enable_cli=0;缓存内存大小(MB) opcache.memory_consumption=256;字符串缓存(MB) opcache.interned_strings_buffer=16;最多缓存多少个 PHP 文件 opcache.max_accelerated_files=10000;生产环境关闭时间戳验证(提升性能,改代码后需手动清缓存) opcache.validate_timestamps=0;重新验证间隔(validate_timestamps=1时有效) opcache.revalidate_freq=60;=====JIT 编译(PHP8.0+,ARM64 收益更大)=====;tracing=追踪模式,最优选择 opcache.jit=tracing opcache.jit_buffer_size=100M7.2创建 PHP-FPM 配置# 复制默认配置cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.confcp/usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf# 编辑主配置vim/usr/local/php/etc/php-fpm.conf;=====/usr/local/php/etc/php-fpm.conf=====[global];PID 文件位置 pid=/usr/local/php/var/run/php-fpm.pid;错误日志 error_log=/usr/local/php/var/log/php-fpm.log;日志级别 log_level=warning;紧急重启:60秒内崩溃超过5次就重启 emergency_restart_threshold=5emergency_restart_interval=60s;子进程响应超时 process_control_timeout=10s;后台运行 daemonize=yes;包含 pool 配置include=/usr/local/php/etc/php-fpm.d/*.conf;=====/usr/local/php/etc/php-fpm.d/www.conf=====[www];运行用户(需要和 Nginx 一致) user=www group=www;=====通信方式=====;Unix Socket(推荐,比 TCP 快) listen=/usr/local/php/var/run/php-fpm.sock listen.owner=www listen.group=www listen.mode=0660;或者用 TCP(跨机器部署时用这个);listen=127.0.0.1:9000;等待队列长度 listen.backlog=65535;=====进程管理=====;dynamic=动态(推荐) pm=dynamic;进程数计算:可用内存(MB)÷ 单进程内存(MB,通常50~80MB);例如 8GB 给 PHP,每进程 60MB:8192÷60≈136,取128pm.max_children=50;启动时进程数=CPU核数 ×2pm.start_servers=8;最少空闲进程数=CPU核数 pm.min_spare_servers=4;最多空闲进程数=CPU核数 ×2pm.max_spare_servers=16;每个进程处理多少请求后重启(防内存泄漏) pm.max_requests=5000;空闲进程超时退出 pm.process_idle_timeout=10s;=====超时保护=====;单请求最长执行时间 request_terminate_timeout=30s;慢请求记录阈值 request_slowlog_timeout=5s slowlog=/usr/local/php/var/log/php-fpm-slow.log;=====访问日志=====access.log=/usr/local/php/var/log/php-fpm-access.log access.format="%R - %u %t\"%m %r\"%s %f %{mili}dms %{kilo}M";=====状态监控=====pm.status_path=/fpm-status ping.path=/fpm-ping ping.response=pong;=====PHP 运行参数覆盖=====php_admin_value[memory_limit]=256M php_admin_value[error_log]=/var/log/php/php-fpm-error.log php_admin_flag[log_errors]=on php_admin_flag[display_errors]=off --- 八、创建运行用户和目录# 创建 www 用户(不允许登录的系统用户)useradd-r-s/sbin/nologin-d/var/www www# 创建必要目录mkdir-p/var/www/html# 网站根目录mkdir-p/var/log/php# PHP 日志mkdir-p/tmp/php_sessions# Session 存储mkdir-p/usr/local/php/var/run# PID 文件mkdir-p/usr/local/php/var/log# PHP-FPM 日志# 设置权限chown-Rwww:www /var/www/htmlchown-Rwww:www /var/log/phpchown-Rwww:www /tmp/php_sessionschown-Rwww:www /usr/local/php/var/# 验证用户创建成功idwww --- 九、配置 PHP-FPM 系统服务# 创建 systemd 服务文件cat>/etc/systemd/system/php-fpm.service<<'EOF'[Unit]Description=PHP FastCGI Process ManagerDocumentation=man:php-fpm(8)After=network.target[Service]Type=notify# PID 文件路径PIDFile=/usr/local/php/var/run/php-fpm.pid# 启动命令(--nodaemonize 让 systemd 管理进程)ExecStart=/usr/local/php/sbin/php-fpm
http://www.jsqmd.com/news/748815/

相关文章:

  • 效率来自节奏,不是卷
  • 区块链与LLM评估:去中心化框架的技术革新
  • 2026石灰厂家哪家靠谱:路面石灰批发推荐/供应石灰/建筑石灰厂家推荐/建筑石灰批发推荐/灰土回填石灰厂家/灰土回填石灰推荐/选择指南 - 优质品牌商家
  • 2026年GEO服务商排名与选型避坑指南
  • OmniRad:医学影像AI跨模态跨任务通用模型实践
  • 高性能AI视频生成框架:ComfyUI-WanVideoWrapper内存管理与企业级部署指南
  • 机器人导航与自动驾驶中的推理原语技术解析
  • 在 Hermes Agent 中自定义 Provider 并接入 Taotoken 服务的流程
  • 2026 终端 AI 编程工具深度横评:Claude Code、Codex CLI、Gemini CLI、Aider 怎么选
  • QUOKA算法:优化LLM推理中的KV缓存与注意力计算
  • 3个让你在Windows上彻底告别网页版B站的超实用技巧
  • DVB-H技术解析:移动数字电视的核心原理与应用
  • 【Java 25虚拟线程调度权威指南】:20年JVM专家亲授5大生产级资源配比黄金公式
  • Villain:新一代轻量级 C2 框架完整使用指南
  • 从零构建项目脚手架:repo-ready 工具的设计原理与工程实践
  • GraTAG:基于图查询分解与三元组对齐的AI搜索引擎生产级部署指南
  • 【java入门到放弃】XXL-JOB
  • 2026川南高低压电工培训可靠企业盘点:快开门式压力容器培训、有限空间作业培训、消防设施操作培训、焊工作业培训选择指南 - 优质品牌商家
  • Beta核权重优化:动态学习率与梯度裁剪策略
  • MINIX NGC-5迷你主机评测:Coffee Lake性能与扩展性解析
  • 从API Key管理角度体验Taotoken平台的安全与便捷性
  • Windows系统wdscore.dll文件丢失无法启动程序解决
  • QMC音频解密工具:3分钟解锁你的加密音乐库
  • 未来M2的新支柱:绿色能源;硬科技高端制造;银发经济与养老医疗健康;数字经济与新基建(算力网络、AI、数据中心
  • 2026振动监测系统TOP名录:无线振动传感器公司哪家好、无线振动传感器厂家哪个好、无线振动传感器厂家哪家好、无线振动传感器哪家靠谱选择指南 - 优质品牌商家
  • 实时性不足、CAN通信丢帧、OTA升级失败——Java IVI系统三大致命故障诊断与热修复方案,车载嵌入式团队紧急必读
  • 2026专业IDC机房厂家推荐服务器租赁精选:服务器主机租用/服务器存放/服务器托管公司/服务器的租用租赁/服务器租用报价/选择指南 - 优质品牌商家
  • 【题解-洛谷】P1614 爱与愁的心痛
  • 2025届学术党必备的AI辅助论文工具横评
  • AI 结对编程不是辅助,是在重构你的工作方式