当前位置: 首页 > 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 中的…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...