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

编译安装php

前置准备

这里的可能不全,每个人安装的模块不一致,依赖也不不相同,按实际情况调整

yum install libxml2 -y
yum install libxml2-devel -y
yum install openssl-devel -y
yum install sqlite-devel -y
yum install libcurl-devel -yyum install -y autoconf automake libtool
# 编译安装oniguruma依赖用到,已安装oniguruma可以不管
cd /usr/src/oniguruma-master && sh autogen.sh
#sh autogen.sh是为了生成configure,默认是没有configure的
./configure --prefix=/usr --libdir=/lib64

安装oniguruma

github oniguruma
https://github.com/kkos/oniguruma
解压后进入文件

#生成配置脚本configure,默认是没有这个脚本的
./autogen.sh
# 配置
./configure --prefix=/usr --libdir=/lib64
make && make install
# 卸载
make uninstall

下载php

php下载地址

解压php

以php-8.3.17.tar.gz为例子

tar xvf php-8.3.17.tar.gz
#解压后的到php-8.3.17

安装php

#!/bin/bashfunction installphp() {
# ==================================================
# 可配置变量区(根据实际需求调整)
# ==================================================# 安装路径配置
read -p "请输入PHP安装路径(默认:/usr/local/php):" prefix_dir
if [ -z "$prefix_dir" ]; thenprefix_dir="/usr/local/php" # PHP 安装主目录
fi
mkdir -p "$prefix_dir"read -p "请输入PHP-FPM配置目录(默认:/etc/php-fpm):" config_dir
if [ -z "$config_dir" ]; thenconfig_dir="/etc/php-fpm" # PHP-FPM 配置文件目录
fi
mkdir -p "$config_dir"# PHP 配置文件路径
read -p "请输入PHP配置文件路径(默认:/etc/php):" php_ini_path
if [ -z "$php_ini_path" ]; thenphp_ini_path="/etc/php" # PHP 配置文件路径
fi
mkdir -p "$php_ini_path"# 扩展配置文件目录
read -p "请输入扩展配置文件目录(默认:/etc/php/conf.d):" ext_conf_dir
if [ -z "$ext_conf_dir" ]; thenext_conf_dir="/etc/php/conf.d" # 扩展配置文件目录
fi
mkdir -p "$ext_conf_dir"# 系统服务用户/组
read -p "请输入PHP-FPM服务组(默认:www):" fpm_group
if [ -z "$fpm_group" ]; then
fpm_group="www"
firead -p "请输入PHP-FPM服务用户(默认:www):" fpm_user
if [ -z "$fpm_user" ]; thenfpm_user="www"
figroupadd "$fpm_group"
useradd -g "$fpm_group" -s /bin/false -M "$fpm_user"# 编译选项配置文件(用于动态加载模块)
# 提示:将需要动态加载的模块在此文件中通过 --enable-xxx=shared 配置
configure_file="./custom_configure_options.txt"# ==================================================
# 前期准备工作
# ==================================================# 进入 PHP 源码目录
read -p "请输入PHP源码路径(输入绝对路径):" php_source_dir
cd "$php_source_dir" || { echo "无法进入 PHP 源码目录"; exit 1; }echo "正在安装 PHP..."
sleep 2
begin_install
}function begin_install() {
# ==================================================
# 生成卸载脚本
# ==================================================
echo "正在生成卸载脚本..."
cat > uninstall.sh << EOF
#!/bin/bash# 停止 PHP-FPM 服务
systemctl stop php-fpm# 删除用户和组
userdel -r $fpm_user
groupdel $fpm_group# 卸载 PHP
rm -rf ${config_dir}
rm -rf ${php_ini_path}
rm -rf ${prefix_dir}
rm -rf /etc/systemd/system/php-fpm.servicerm -rf /usr/bin/php
rm -rf /usr/bin/phpize
rm -rf /usr/sbin/php-fpmecho "PHP 卸载完成"
EOF# ==================================================
# 配置编译选项
# ==================================================# 生成自定义编译选项文件(示例配置,根据实际需求修改)
echo "正在生成自定义编译选项文件...需要的模块可用./configure --help查看"
cat > "$configure_file" << EOF
--prefix=${prefix_dir}
--with-config-file-path=${php_ini_path}
--with-config-file-scan-dir=${php_ini_path}/conf.d
--with-fpm-group=${fpm_group}
--with-fpm-user=${fpm_user}
--enable-fpm
--with-openssl
--with-zlib
--with-pcre-jit
--enable-opcache=shared
--with-curl=shared
--enable-bcmath=shared
--enable-gd=shared
--with-mysqli=shared
--with-pdo-mysql=shared
--enable-mbstring=shared
--with-iconv=shared
--enable-exif=shared
--enable-sockets=shared
EOF# 应用配置并添加动态模块支持
# 注意:这里使用 source 加载变量,实际执行时需要替换变量值
configure_options=$(envsubst < "$configure_file")# 执行配置命令
./configure $configure_options || {echo "配置阶段失败,请检查依赖和选项";exit 1;
}# ==================================================
# 编译与安装
# ==================================================make -j$(nproc) || { echo "编译失败"; exit 1; }
sudo make install || { echo "安装失败"; exit 1; }# ==================================================
# 配置文件处理
# ==================================================# 复制 php.ini
sudo cp php.ini-production "$php_ini_path/php.ini"# 配置扩展目录(重要:必须与实际安装路径匹配)
extension_dir=$("$prefix_dir/bin/php-config" --extension-dir)
echo "extension_dir = $extension_dir" | sudo tee -a "$php_ini_path/php.ini"# 创建扩展配置文件(示例配置,根据需要修改)
sudo tee "$ext_conf_dir/10-opcache.ini" << 'EOF'
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
EOFsudo tee "$ext_conf_dir/20-common.ini" << 'EOF'
extension=curl.so
extension=bcmath.so
extension=gd.so
extension=mysqli.so
extension=pdo_mysql.so
EOF# 复制 PHP-FPM 配置文件
sudo cp sapi/fpm/php-fpm.conf "$config_dir/php-fpm.conf"
}# ==================================================
# 系统服务配置
# ==================================================
function create_systemd_service() {# 创建 systemd 服务文件
sudo tee /etc/systemd/system/php-fpm.service << EOF
[Unit]
Description=PHP 8.3 FastCGI Process Manager
After=network.target[Service]
Type=simple
User=$fpm_user
Group=$fpm_group
ExecStart=$prefix_dir/sbin/php-fpm --nodaemonize --fpm-config $config_dir/php-fpm.conf
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF# ==================================================
# 启动服务
# ==================================================sudo systemctl daemon-reload
sudo systemctl enable php-fpmchown -R "$fpm_user":"$fpm_group" "$prefix_dir"
chown -R "$fpm_user":"$fpm_group" "$config_dir"
chown -R "$fpm_user":"$fpm_group" "$php_ini_path"
chown -R "$fpm_user":"$fpm_group" "$ext_conf_dir"cp $prefix_dir/etc/php-fpm.d/www.conf.default $prefix_dir/etc/php-fpm.d/www.confln -s $ext_conf_dir/bin/php /usr/bin/php
ln -s $ext_conf_dir/bin/phpize /usr/bin/phpize
ln -s $ext_conf_dir/bin/php-fpm /usr/sbin/php-fpmsudo systemctl start php-fpm
sudo systemctl status php-fpm}function wizard() {read -p "请选择操作:1.安装 2.卸载: " is_installif [ "$is_install" == "1" ]; theninstallphpcreate_systemd_serviceelif [ "$is_install" == "2" ]; thenecho "请到解压文件中执行uninstall.sh脚本"elseecho "输入错误,请重新输入"wizardfi
}wizard

在这里插入图片描述
需要添加模块可执行 sh configure --help 查看
在这里插入图片描述

卸载

在这里插入图片描述
uninstall.sh是安装脚本里生成的,与安装时候的配置相关

相关文章:

编译安装php

前置准备 这里的可能不全&#xff0c;每个人安装的模块不一致&#xff0c;依赖也不不相同&#xff0c;按实际情况调整 yum install libxml2 -y yum install libxml2-devel -y yum install openssl-devel -y yum install sqlite-devel -y yum install libcurl-devel -yyum ins…...

【JavaEE进阶】Spring MVC(3)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗 如有错误&#xff0c;欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...

30 款 Windows 和 Mac 下的复制粘贴软件对比

在日常电脑操作中&#xff0c;复制粘贴是极为高频的操作&#xff0c;一款好用的复制粘贴软件能极大提升工作效率。以下为你详细介绍 30 款 Windows 和 Mac 下的复制粘贴软件&#xff0c;并对比它们的优缺点&#xff0c;同时附上官网下载地址&#xff0c;方便大家获取软件。 Pa…...

【LLAMA】羊驼从LLAMA1到LLAMA3梳理

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 LLAMA 1到3梳理 1. LLAMA 1 论文&#xff1a; LLaMA: Open and Efficient Foundation Language Models 时间&#xff1a; 2023.02 1.1 前言…...

【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动&#xff1a;nvidia-550&#xff08;1&#xff09;查询显卡ID&#xff08;2&#xff09;PCI ID Repository查询显卡型号&#xff08;3&#xf…...

【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python

6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛&#xff0c;但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解&#xff0c;所以农夫约翰将竞赛以…...

JAVA中常用类型

一、包装类 1.1 包装类简介 java是面向对象的语言&#xff0c;但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点&#xff0c;为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型&#xff0c;这八种具有面向对象特征的类型&#xff0c;就叫做包…...

【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)

背景需求&#xff1a; 做了中班的四类活动安排表&#xff0c;我顺便给大班做一套 【办公类-90-01】】20250213中班周计划四类活动的写法&#xff08;分散运动、户外游戏、个别化&#xff08;美工室图书吧探索室&#xff09;&#xff09;-CSDN博客文章浏览阅读874次&#xff0…...

求矩阵对角线元素的最大值

求主对角线元素的最大值时&#xff0c;让指针指向A[N-1][N-1]&#xff0c;指针以(N1)为单位递增&#xff0c;就可以指向对角线每个元素&#xff1b; 求次对角线元素的最大值时&#xff0c;让指针指向A[0][N-1]&#xff0c;指针以(N-1)为单位递增&#xff0c;就可以指向副对角线…...

NoSQL之redis数据库

案例知识 关系与分关系型数据库 关系型数据库&#xff1a;Oracle&#xff0c;MySQL&#xff0c;SQL Server 非关系型数据库&#xff1a;Redis&#xff0c;MongDB Redis文件路径 配置文件&#xff1a;/etc/redis/6379.conf 日志文件&#xff1a;/var/log/redis_6379.log 数据文…...

【R语言】非参数检验

一、Mann-Whitney检验 在R语言中&#xff0c;Mann-Whitney U检验&#xff08;也称为Wilcoxon秩和检验&#xff09;用于比较两个独立样本的中位数是否存在显著差异。它是一种非参数检验&#xff0c;适用于数据不满足正态分布假设的情况。 1、独立样本 # 创建两个独立样本数据…...

【力扣Hot 100】栈

1. 有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...

HTTP 与 HTTPS:协议详解与对比

文章目录 概要 一. HTTP 协议 1.1 概述 1.2 工作原理 1.3 请求方法 1.4 状态码 二. HTTPS 协议 2.1 概述 2.2 工作原理 2.3 SSL/TLS 协议 2.4 证书 三. HTTP 与 HTTPS 的区别 四. 应用场景 4.1 HTTP 的应用场景 4.2 HTTPS 的应用场景 概要 HTTP&#xff08;Hy…...

C++编程语言:抽象机制:模板和层级结构(Bjarne Stroustrup)

目录 27.1 引言(Introduction) 27.2 参数化和层级结构(Parameterization and Hierarchy) 27.2.1 生成类型(Generated Types) 27.2.2 模板转换(Template Conversions) 27.3 类模板层级结构(Hierarchies of Class Templates) 27.3.1 模板对比接口(Templates as Interf…...

建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11

这次我们继续解读代码&#xff0c;我们主要来看下面两个部分&#xff1b; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习&#xff1a; #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…...

在使用export default 导出时,使用的components属性的作用?

文章目录 析与思考回答 析与思考 在 Vue.js 中&#xff0c;使用 export default 导出组件时&#xff0c;通常会通过 components 选项将子组件也导出出来&#xff08;其实是将子组件进行局部注册&#xff09; 。这涉及到 Vue.js 组件的注册机制。为了更清晰地理解这个问题&…...

以太网交换基础(涵盖二层转发原理和MAC表的学习)

在当今的网络世界中&#xff0c;以太网交换技术是局域网&#xff08;LAN&#xff09;的核心组成部分。无论是企业网络、学校网络还是家庭网络&#xff0c;以太网交换机都扮演着至关重要的角色。本文将详细介绍以太网交换的基础知识&#xff0c;包括以太网协议、帧格式、MAC地址…...

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下&#xff1a; 根据自己场景判断 PDF 和 图片&#xff0c;下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…...

【2025最新计算机毕业设计】基于SpringBoot+Vue非遗传承与保护研究系统【提供源码+答辩PPT+文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

组合总和力扣--39

目录 题目 思路 剪枝优化 代码 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...