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

相关推荐

  1. PHP8编译安装

    2024-07-21 12:56:04       32 阅读
  2. php编译安装

    2024-07-21 12:56:04       18 阅读
  3. 编译安装PHP5.6

    2024-07-21 12:56:04       50 阅读
  4. PHP7.4编译安装

    2024-07-21 12:56:04       18 阅读
  5. php版本编译以及扩展包安装

    2024-07-21 12:56:04       58 阅读
  6. Apache、MySQL、PHP编译安装LAMP环境

    2024-07-21 12:56:04       40 阅读
  7. Linux——PHP8.0编译安装和yum安装

    2024-07-21 12:56:04       34 阅读
  8. ubuntu源码编译安装memcached和php-memcache 扩展

    2024-07-21 12:56:04       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 12:56:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 12:56:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 12:56:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 12:56:04       55 阅读

热门阅读

  1. centos 网卡创建vlan接口

    2024-07-21 12:56:04       15 阅读
  2. 【头歌】 HBase 伪分布式环境搭建 答案

    2024-07-21 12:56:04       14 阅读
  3. ubuntu 挂载硬盘,raspberry pi 树莓派,jetson

    2024-07-21 12:56:04       20 阅读
  4. PCIe总线-RK3588 PCIe驱动设备树介绍(九)

    2024-07-21 12:56:04       14 阅读
  5. 我的创作纪念日——365天

    2024-07-21 12:56:04       17 阅读
  6. 掌握Perl的魔法:深入探索钩子(Hook)机制

    2024-07-21 12:56:04       18 阅读
  7. 【AI原理解析】—粒子群(PSO)原理

    2024-07-21 12:56:04       15 阅读
  8. 门控循环单元(GRU)及其预测和分类Python实现

    2024-07-21 12:56:04       16 阅读
  9. 【日常介绍】—pycharm2024.1变化

    2024-07-21 12:56:04       21 阅读