2025-04-11
PHP
php7.4
56

一、安装扩展

1.安装常用依赖
yum -y groupinstall 'Development Tools'
yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel sqlite-devel bison re2c sqlite-devel.x86_64
2.安装 oniguruma
mbstring 正则表达式处理功能对这个包有依赖性
mkdir /usr/local/download
cd /usr/local/download

wget https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz
tar -zxvf /usr/local/download/onig-6.9.8.tar.gz
cd /usr/local/download/onig-6.9.8

./configure --prefix=/usr --libdir=/lib64
make clean
make && make install

# 设置环境变量
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
source /etc/profile
3.安装 libzip
zip 扩展需要安装依赖 libzip: configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met
cd /usr/local/download

wget https://libzip.org/download/libzip-1.3.2.tar.gz --no-check-certificate
tar -zxvf libzip-1.3.2.tar.gz
cd libzip-1.3.2

./configure --prefix=/usr --libdir=/lib64
make clean
make && make install

# 设置环境变量
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
source /etc/profile
4.安装 sodium
sodium 加密扩展需要安装依赖 libsodium: configure: error: Package requirements (libsodium >= 1.0.8) were not met: No package 'libsodium' found
cd /usr/local/download

wget https://github.com/jedisct1/libsodium/releases/download/1.0.18-RELEASE/libsodium-1.0.18.tar.gz
tar -zxvf libsodium-1.0.18.tar.gz
cd libsodium-1.0.18

./configure --prefix=/usr --libdir=/usr/lib64
make clean
make && make install

# 设置环境变量
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
source /etc/profile

二、安装 php7.4

1.下载安装
cd /usr/local/download

wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar -zxvf php-7.4.33.tar.gz
cd /usr/local/download/php-7.4.33/

# 注意:与php8版本参数不一样
./configure --prefix=/usr/local/software/php7.4 --with-config-file-scan-dir=/usr/local/software/php7.4/etc/ --enable-opcache --enable-session --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --with-sqlite3 --with-gettext --enable-mbregex --enable-mbstring --enable-xml --with-iconv --with-mhash --with-openssl --enable-bcmath --enable-soap --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zlib --with-bz2 --with-readline --with-xsl --with-sodium --enable-zip --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir
make clean
make && make install

# 如果内存不足,增加临时内存 2G
dd if=/dev/zero of=/opt/swap bs=1024 count=2048000
mkswap /opt/swap && swapon /opt/swap && chmod 600 /opt/swap
echo '/opt/swap swap swap default 0 0' >> /etc/fstab
mount -a
2.配置 php.ini
cp /usr/local/download/php-7.4.33/php.ini-development /usr/local/software/php7.4/etc/php.ini

vim /usr/local/software/php7.4/etc/php.ini
cat /usr/local/software/php7.4/etc/php.ini | grep ^[^\;]

# 参数设置
display_errors = Off # 关闭错误提示
error_reporting = E_ALL # 显示所有错误
log_errors = On # 错误日志开启
error_log=/www/log/php/php74_errors.log # 错误日志文件位置

date.timezone = PRC # 修改时区
expose_php = Off # 隐藏 php 版本信息
file_uploads = on # 是否允许通过 HTTP 上传文件的开关。默认为 on
upload_tmp_dir = /tmp # 服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 50M # 即允许上传文件大小的最大值。默认为 2M
post_max_size = 50M # 指通过表单 POST 给 PHP 的所能接收的最大值,包括表单里的所有值。默认为 8M
max_execution_time = 1200 # 每个 PHP 页面运行的最大时间值(秒),默认 30 秒
max_input_time = 1200 # 每个 PHP 页面接收数据所需的最大时间,默认 60 秒
memory_limit = 512M # 每个 PHP 页面所吃掉的最大内存,默认 8M
short_open_tag = Off # 关闭短标签

# zlib 压缩文件
zlib.output_compression = On
zlib.output_compression_level = 5
;zlib.output_handler # 必须保持注释掉,因为此参数和前面的设置冲突——官方的说法
output_buffering = 4096 # 一般情况下缓存是4k

# 开启 opcache
zend_extension=opcache # 开启 opcache 扩展

opcache.enable=1 # 开关打开
opcache.enable_cli=1 # cli 环境下启用 opcache
opcache.memory_consumption=256 # 设置共享内存大小, 单位为:Mb
opcache.max_accelerated_files=200000 # 对多缓存文件限制, 范围 200-1000000 之间,计算文件数命令:find . -type f -print | grep php | wc -l
opcache.validate_timestamps=1 # 1 表示启用,每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新
opcache.revalidate_freq=600 # 检查脚本时间戳是否有更新的周期,单位:秒。本地开发设置为0,表示每次请求都会检查PHP代码是否更新

touch /www/log/php/php74_errors.log # 新建空白文件
chown nginx:nginx /www/log/php/php74_errors.log # 指定文件所有者

# 如果修改配置文件后,启动 php74-fpm 失败
cat /var/log/messages # 查看日志

sestatus # 检查 SElinux 是否关闭
vim /etc/selinux/config
# 修改文件中 SELINUX="" 为 SELINUX=disabled,然后重启 linux
3.配置 php-fpm.conf
cp /usr/local/software/php7.4/etc/php-fpm.conf.default /usr/local/software/php7.4/etc/php-fpm.conf

vim /usr/local/software/php7.4/etc/php-fpm.conf
cat /usr/local/software/php7.4/etc/php-fpm.conf | grep ^[^\;]

# 打开该注释,该文件在/usr/local/software/php7.4/var/run/php-fpm.pid
pid = run/php-fpm.pid

# 错误日志文件
error_log = /www/log/php/php74_fpm.log

# 打开该注释 该行打开后 php-fpm -start -D 可以在后台启动
daemonize = yes

include=/usr/local/software/php7.4/etc/php-fpm.d/*.conf

touch /www/log/php/php74_fpm.log # 新建空白文件
chown nginx:nginx /www/log/php/php74_fpm.log # 指定文件所有者
4.配置 www.conf
cp /usr/local/software/php7.4/etc/php-fpm.d/www.conf.default /usr/local/software/php7.4/etc/php-fpm.d/www.conf

vim /usr/local/software/php7.4/etc/php-fpm.d/www.conf
cat /usr/local/software/php7.4/etc/php-fpm.d/www.conf | grep ^[^\;]

# 参数设置
user = nginx
group = nginx
listen = 127.0.0.1:9074

# 查看每个 php-fpm 进程消耗内存
ps -ylC php-fpm --sort:rss
ps -ylC php-fpm --sort:rss | wc -l
# 计算 php-fpm 进程消耗平均内存
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M")}'

pm = dynamic  # 指定进程管理方式,有 3 种可供选择:static, dynamic 和 ondemand
pm.max_children = 50 # static 模式下创建的子进程数或 dynamic 模式下同一时刻允许最大的 php-fpm 子进程数量,计算方式:php 可用内存 / php-fpm 进程消耗平均内存
pm.start_servers = 20 # dynamic 模式下起始 php-fpm 进程数量,默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 10 # dynamic 模式下服务器空闲时最小 php-fpm 进程数量
pm.max_spare_servers = 30 # dynamic 模式下服务器空闲时最大 php-fpm 进程数量
pm.max_requests = 1000 # php-fpm 子进程能处理的最大请求数,每一个 php-fpm 进程处理的请求数累积到 max_requests 个后,自动重启该进程,这样达到了释放内存的目的

request_terminate_timeout = 1800 # web 请求 php 执行时间受到两方面控制,一个是 php.ini 的 max_execution_time(要注意的是 sleep,http 请求等待响应的时间是不算的,这里算的是真正的执行时间),另一个是 php-fpm 中 request_terminate_timeout 设置,这个算的是请求开始 n 秒

# 慢日志
slowlog = /www/log/php/php74_slowlog.log
request_slowlog_timeout = 3s

touch /www/log/php/php74_slowlog.log # 新建空白文件
chown nginx:nginx /www/log/php/php74_slowlog.log # 指定文件所有者
5.设置开机启动
# 方式一
cp /usr/local/download/php-7.4.33/sapi/fpm/php-fpm.service /usr/lib/systemd/system/php74-fpm.service
vim /usr/lib/systemd/system/php74-fpm.service

# ProtectSystem 为 true 时,php-fpm 进程将以只读方式挂载到 /usr 目录,修改为 false
# ProtectSystem=full
ProtectSystem=false

systemctl daemon-reload
systemctl enable php74-fpm

# 方式二
cp /usr/local/download/php-7.4.33/sapi/fpm/init.d.php-fpm /etc/init.d/php74-fpm
chmod +x /etc/init.d/php74-fpm

chkconfig --add php74-fpm
chkconfig php74-fpm on
6.创建软链接
# ln -s 源文件 目标文件
ln -s /usr/local/software/php7.4/sbin/php-fpm /usr/bin/php74-fpm
ln -s /usr/local/software/php7.4/bin/php /usr/bin/php74

php74-fpm -v
php74 -v
7.启动 php-fpm
# 方式一
systemctl start php74-fpm.service
systemctl stop php74-fpm.service
systemctl restart php74-fpm.service

# 方式二
/etc/init.d/php74-fpm start

service php74-fpm start
service php74-fpm stop
service php74-fpm restart
8.每日重启 php-fpm
crontab -e

# 每天凌晨 3:00 分执行一次
0 3 * * * service php74-fpm reload
9.多版本 composer
php74 -v
composer --version

php74 /usr/bin/composer install
标签:

php7.4