php编译安装

一、基础环境准备

# php使用www用户
useradd -s /sbin/nologin -M www

二、下载php包

# 下载地址 https://www.php.net/downloads
wget https://www.php.net/distributions/php-8.3.9.tar.gz

三、配置编译安装

编译安装之前需要处理必要的依赖,在编译配置安装,否则编译不通过!

配置项处理好之后,编译安装即可!

四、配置启动模式

配置启动模式

五、启动服务配置

启动服务配置

配置configure

说明:

installDir是php服务安装目录。

配置项

./configure \
# 安装目录
--prefix=installDir \
# php.ini路径
--with-config-file-path=installDir/etc \
# 禁用在搜索路径中传递其他运行库
--disable-rpath \
# 以fastCGI方式运行PHP服务
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
# 进程控制
--enable-pcntl \
# 系统V信号量(信号量)
--enable-sysvsem \
# 系统V共享内存(共享内存与shmop差别是提供操作函数不同支持key value操作)
--enable-sysvshm \
# 系统V消息(消息队列)
--enable-sysvmsg \
# 共享内存 只能按字节操作
--enable-shmop \
--enable-opcache \
--enable-mysqlnd \
# 启用多字节的正则表达式
--enable-mbregex \
# 禁用短形式开始标签
--disable-short-tags--enable-zts
# 线程安全选项开启后效率不是很友好

配置项扩展

[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
mysqlnd
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
random
Reflection
session
shmop
SimpleXML
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
[Zend Modules]

配置configure错误

# error: off_t undefined; check your library configuration
# /etc/ld.so.conf文件中添加以下几行
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
# 使动态库生效
ldconfig -v

配置启动模式

说明:

phpSrcDir是php源码包目录。

configFilePath是–with-config-file-path配置项目录。

处理php.ini配置文件

# 复制源包中的php.ini-production文件即可
cp phpSrcDir/php.ini-production configFilePath/php.ini

配置php-fpm

以端口方式启动php

# 1 php-fpm.conf文件
cd configFilePath
mv php-fpm.conf.default php-fpm.conf# 2 www.conf文件
cd php-fpm.d
mv www.conf.default www.conf

unix domain socket方式启动php

# 1 php-fpm.conf文件
cd configFilePath
mv php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
# 取消以下注释即删除最前边的分号
# ;pid = run/php-fpm.pid# 2 www.conf文件
cd php-fpm.d
mv www.conf.default www.conf
vim www.conf
# 注释
;listen = 127.0.0.1:9000
# 添加或改为如下
listen=var/run/php-fpm.sock
# 取消以下注释即删除最前边的分号
listen.owner=www
listen.group=www
listen.mode=0660

启动服务配置

说明:

phpSrcDir是php源码包目录。

installDir是–prefix配置项目录。

phpVersionName是php服务以init方式启动php的文件名,此文件名可随意命名,只要冲突即可。

init

# 将启动脚本复制到/etc/init.d目录下并给予可执行权限
cp phpSrcDir/sapi/fpm/init.d.php-fpm /etc/init.d/phpVersionName
chmod +x /etc/init.d/phpVersionName# 启动关闭或重新启动php服务
/etc/init.d/phpVersionName [start|stop|restart]# php成功后记得更改sock的权限 例如以www用户启动的php
chown www.www installDir/var/run/php-fpm.sock

php优化

php-ini优化

;短标签支持
short_open_tag = Off
;关闭php头部信息隐藏版本号 默认On
expose_php = Off
;最大脚本运行时间 默认30
max_execution_time = 100
;最大输入时间 默认60
max_input_time = 100
;脚本内存限制 默认128M
memory_limit = 128M
;错误级别 默认E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
;是否输出详细错误信息 默认Off
display_errors = On
;记录错误⽇志⾄文件⽅便追溯
log_errors = On
;错误日志
error_log = var/log/ini_error.log
;POST数据最大值 默认8M
post_max_size = 50M
;是否开启pathinfo
cgi.fix_pathinfo = 1
;是否允许上传文件 默认On
file_uploads = On
;允许上传文件的最大值 默认2M
upload_max_filesize = 50M
;允许同时上传文件的最大数量 默认20
max_file_uploads = 20
;时区 默认PRC
date.timezone = Asia/Shanghai
;远程执⾏phpshell 默认On
allow_url_fopen = Off
;socket超时时间 默认60
default_socket_timeout = 60

php-fpm优化

[global]
;pid设置记录程序启动后pid
pid = run/php-fpm.pid
;php-fpm程序启动错误⽇志路径 等同于install/log/php_fpm.log
error_log = log/php_fpm.log
;错误级别 alert必须⽴即处理 error错误 warning警告 notice⼀般重要信息(默认) debug调试信息
log_level = notice
;master进程的打开文件描述符rlimit数量
rlimit_files = 65535[www]
;绑定IP:监听端口或Uinx套接字地址
;若需外网访问连接方式为TCP套接字将IP改为0.0.0.0
listen = var/run/php-fpm.sock
;listen(2)backlog的值
listen.backlog = 8192
;允许连接到FastCGI客户端的地址IP列表(IP白名单 默认any不限制) 多个用逗号隔开
;配置正确的IP白名单 在防火墙/安全组放行监听端口有安全风险需谨慎
listen.allowed_clients = 127.0.0.1;PHP-FPM运行模式 进程管理器如何管理子进程
;static静态 子进程的数量是固定的pm.max_children 对内存开销较大但并发能力较好
;dynamic动态 按设置最大空闲进程数来收回进程内存开销小
;ondemand按需与dynamic相反 根据访问需求自动创建进程内存开销极小但并发能力略差
pm = dynamic
;启动时创建子进程数(服务启动后初始进程数量)
pm.start_servers = 5
;最小空闲进程数(清理空闲进程后保留数量)
pm.min_spare_servers = 5
;最大空闲进程数(当空闲进程达到此值时清理)
pm.max_spare_servers = 10
;允许创建最大子进程数量值越大并发能力越强 每个PHP子进程需要20MB左右内存值过大会导致服务器不稳定
pm.max_children = 50
;每个子进程重生之前服务的请求数(最⼤请求)
pm.max_requests = 1024
;查看FPM状态页面的URI(以斜线(/)开头)
pm.status_path = /fpm_status;单个请求的超时中止时间(超时限制秒)
request_terminate_timeout = 100
;请求超时后 会将对应的PHP调用堆栈信息完整写入到慢日志中(秒)
request_slowlog_timeout = 30
;slowlog日志堆栈追踪的深度
request_slowlog_trace_depth = 20
;慢日志
slowlog = var/log/slow.log

fpm状态⻚⾯

# fpm状态⻚⾯⽤于监控php-fpm状态使⽤
pm.status_path=/fpm_status
## nginx配置
location = /fpm_status {fastcgi_pass    unix:php-fpm.sock;fastcgi_index   index.php;#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;fastcgi_param   SCRIPT_FILENAME $realpath_root$fastcgi_script_name;include         fastcgi_params;
}# php-fpm状态页可以通过带参数实现个性化,可以带参数json、xml、html并且前面三个参数可以分别和full做一个组合# php-fpm status详解
## fpm池子名称大多数为www
pool:                 www
## 进程管理方式static dynamic ondemand
process manager:      dynamic
## 启动日期如果reload了php-fpm时间会更新
start time:           18/Sep/2023:18:55:06 +0800
## 运行时长
start since:          50729
## 当前池子接受的请求数
accepted conn:        13
## 请求等待队列如果这个值不为0那么要增加FPM的进程数量
listen queue:         0
## 请求等待队列最高的数量
max listen queue:     0
## socket等待队列长度
listen queue len:     0
## 空闲进程数量
idle processes:       1
## 活跃进程数量
active processes:     1
## 总进程数量
total processes:      2
## 最大的活跃进程数量(FPM启动开始算)
max active processes: 1
## 进程最大数量限制的次数如果这个数量不为0那说明最大进程数量太小了改大一点
max children reached: 0
## 启用了php-fpm slowlog缓慢请求的数量
slow requests:        0# php-fpm full详解
## 进程PID可以单独kill这个进程
pid:                  101281
## 当前进程的状态(Idle Running…)
state:                Idle
## 进程启动的日期
start time:           18/Sep/2023:18:55:06 +0800
## 当前进程运行时长
start since:          51262
## 当前进程处理了多少个请求
requests:             8
## 请求时长(微妙)
request duration:     6021
## 请求方法(GET POST…)
request method:       GET
## 请求URI
request URI:          /php8-0-10status
## 请求内容长度(仅用于POST)
content length:       0
## 用户(PHP_AUTH_USER)(or‘-’如果未设置)
user:                 -
## PHP脚本 (or‘-’if not set)
script:               -
## 最后一个请求CPU使用率
last request cpu:     166.09
## 上一个请求使用的内存
last request memory:  2097152

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用多进程和多线程实现服务器并发【C语言实现】

在TCP通信过程中,服务器端启动之后可以同时和多个客户端建立连接,并进行网络通信,但是在一个单进程的服务器的时候,提供的服务器代码却不能完成这样的需求,先简单的看一下之前的服务器代码的处理思路,再来分…

Python中自定义上下文管理器的创建与应用

Python中自定义上下文管理器的创建与应用 在Python编程中,上下文管理器是一个非常重要的概念。它们允许我们更好地管理资源,如文件句柄、网络连接或数据库连接等,确保这些资源在使用后能够被正确关闭或释放,从而避免资源泄露。Python标准库中的contextlib模块提供了强大的…

代码随想录学习 day54 图论 Bellman_ford 算法精讲

Bellman_ford 算法精讲 卡码网:94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市&#xf…

【HarmonyOS】网络连接 - Http 请求数据

在日常开发应用当中,应用内部有很多数据并不是保存在应用内部,而是在服务端。所以就需要向服务端发起请求,由服务端返回数据。这种请求方式就是 Http 请求。 一、申请网络权限 在 module.json5 文件中,添加网络权限: …

手持式气象站:便携科技,掌握微观气象的利器

手持式气象站,顾名思义,是一种可以随身携带的气象监测设备。它小巧轻便,通常配备有温度、湿度、风速、风向、气压等多种传感器,能够实时测量并显示各种气象参数。不仅如此,它还具有数据存储、数据传输、远程控制等多种…

Django教程(003):orm操作数据库

文章目录 1 orm连接Mysql1.1 安装第三方模块1.2 ORM1.2.1、创建数据库1.2.2、Django连接数据库1.2.3、django操作表1.2.4、创建和修改表结构1.2.5、增删改查1.2.5.1 增加数据1.2.5.2 删除数据1.2.5.3 获取数据1.2.5.4 修改数据 1 orm连接Mysql Django为了使操作数据库更加简单…

Linux shell编程学习笔记65: nice命令 显示和调整进程优先级

0 前言 我们前面学习了Linux命令ps和top,命令的返回信息中包括优先序(NI,nice) ,我们可以使用nice命令来设置进程优先级。 1 nice命令 的功能、格式和选项说明 1.1 nice命令 的功能 nice命令的功能是用于调整进程的…

AP ERP与汉得SRM系统集成案例(制药行业)

一、项目环境 江西某医药集团公司,是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今,企业经营一直呈现稳健、快速发展的态势, 2008 年排名中国医药百强企业前 20 强,2009年集团总销售额约38亿元人民币…

原码、补码、反码、移码是什么?

计算机很多术语翻译成中文之后,不知道是译者出于什么目的,往往将其翻译成一个很难懂的名词。 奇怪的数学定义 下面是关于原码的“吐槽”,可以当作扩展。你可以不看,直接去下一章,没有任何影响。 原码的吐槽放在前面是…

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api,后来想要做租户独立发展,每个租户独立成一个项目,比如租户akc独立部署一个akc-open-api,租户yhd独立部署一个yhd-open-api,其中大部分代码是相同的,少量租户定制…

2024牛客暑期多校训练营1——A,B

题解&#xff1a; 更新&#xff1a; k1的时候要乘n 代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N5e35; typedef long long ll; typedef pair<int,int> PII; int T; int n,m,mod; int fac[N][N]; int dp[N][…

设计模式使用场景实现示例及优缺点(结构型模式——外观模式)

在一个繁忙而复杂的城市中&#xff0c;有一座名为“技术森林”的巨大图书馆。这座图书馆里藏着各种各样的知识宝典&#xff0c;从古老的卷轴到现的电子书籍&#xff0c;无所不包。但是&#xff0c;图书馆之所以得名“技术森林”&#xff0c;是因为它的结构异常复杂&#xff0c;…

服务器注意事项

1. 远程服务器不允许关机&#xff0c;只能重启&#xff1b; 2. 重启服务器应关闭服务&#xff1b; 3. 不要在服务器访问高峰运行高负载命令&#xff1b; 4. 远程配置防火墙是不要把自己踢出服务器&#xff1b; 5. 制定合理的密码规范并定期更新&#xff1b; 6. 合理分配权…

笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调

内容摘自王老师的B站视频&#xff0c;大家还是尽量去看视频&#xff0c;老师讲的特别好&#xff0c;不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning&#xff08;小样本分类&#xff09; 假设现在每类…

【Linux】基础I/O——动静态库的制作

我想把我写的头文件和源文件给别人用 1.把源代码直接给他2.把我们的源代码想办法打包为库 1.制作静态库 1.1.制作静态库的过程 我们先看看怎么制作静态库的&#xff01; makefile 所谓制作静态库 需要将所有的.c源文件都编译为(.o)目标文件。使用ar指令将所有目标文件打包…

【前端】JavaScript入门及实战41-45

文章目录 41 嵌套的for循环42 for循环嵌套练习(1)43 for循环嵌套练习(2)44 break和continue45 质数练习补充 41 嵌套的for循环 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"…

谷粒商城实战笔记-38-前端基础-Vue-指令-单向绑定双向绑定

文章目录 一&#xff0c;插值表达式注意事项1&#xff1a;不适合复杂的逻辑处理注意事项2&#xff1a;插值表达式支持文本拼接注意事项3&#xff1a;插值表达式只能在标签体中 二&#xff0c;v-html和v-textv-textv-html区别总结&#xff1a;最佳实践 三&#xff0c;v-model复选…

WordPress杂技

WordPress杂技 WordPress页面构建器: Avada、Elementor、astra、 Elementor作为一款强大的页面构建工具。 Avada&#xff1a;是一款非常受欢迎的WordPress主题&#xff0c;它的设计理念是简洁、现代、响应式&#xff0c;Avada拥有丰富的模板和布局&#xff0c;可以轻松创建出…

多线程顺序执行

前言 现在面试中&#xff0c;不光会问力扣之类的算法&#xff0c;手撕多线程问题也被提上了日程。多线程之间的顺序执行是一个高频的面试手撕题&#xff0c;而且在实际应用中也会有用武之地。因此在这里&#xff0c;我们考虑使用不同的方式来实现多线程的顺序执行。在本文中&a…