您现在的位置是:首页 > 技术教程 正文

php8.2 编译安装(详细)+ bash脚本 (多linux版本)

admin 阅读: 2024-03-15
后台-插件-广告管理-内容页头部广告(手机)

编译安装php8.2.10(2023.9.17更新)
以下操作在debian12(deb系-debian\ubuntu)和rocky9.2(red hat系-centos\rocky linux\oracle linux)都测试过
仅限linux系统

在全文的最后,我写了bash脚本(只支持deb系),可以参考,直接运行bash脚本一键编译安装


1.下载并解压源码包

php官方下载页面
在/usr/local目录下操作

cd /usr/local
  • 1

下载源码包

wget https://www.php.net/distributions/php-8.2.10.tar.gz
  • 1

解压并进入目录

tar -zxvf php-8.2.10.tar.gz && cd php-8.2.10
  • 1

2.安装依赖

依赖是根据开启的扩展决定的,以下的拓展是常用的,编译安装的好处之一,就是如果缺少拓展也很容易自行安装。
1)deb系列

apt-get install build-essential autoconf automake libtool libsqlite3-dev pkg-config libjpeg-dev libpng-dev libxml2-dev libbz2-dev libcurl4-gnutls-dev libssl-dev libffi-dev libwebp-dev libonig-dev libzip-dev
  • 1

2)redhat系列

redhat系由于包不全(deb系好用啊),如果遇到找不到的包,可以在
pkgs.org中查找

dnf -y groupinstall 'Development Tools'
  • 1
dnf -y install wget libxml2-devel sqlite-devel bzip2-devel libcurl-devel libffi-devel libpng-devel libwebp-devel libjpeg-devel oniguruma libzip
  • 1

安装 oniguruma

wget https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
  • 1
dnf -y install oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
  • 1

安装libzip-devel

wget https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/l/libzip-devel-1.7.3-7.el9.x86_64.rpm
  • 1
dnf -y install libzip-devel-1.7.3-7.el9.x86_64.rpm
  • 1

3.编译安装

查看编译参数(可跳过,如果你不知道参数的作用)

./configure -help
  • 1

编译参数如下:

./configure --prefix=/usr/local/php --sysconfdir=/etc/php --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring --with-imap-ssl --with-mysqli --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl
  • 1

上面的展开说明(使用的话直接复制上面的,这里是做解释用的)

./configure --prefix=/usr/local/php #安装地址 --sysconfdir=/etc/php #设置文件地址 --with-openssl #启用ssl --with-zlib --with-bz2 --with-curl #启用curl(必开) --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring #必开,很多需要用到 --with-imap-ssl --with-mysqli #mysqli函数,如果用pdo,可以补开 --enable-exif --with-ffi #支持外挂C程序 --with-zip --enable-sockets #开启socket --with-pcre-jit #开启jit --enable-fpm #开启fpm模式(必开) --with-pdo-mysql #支持mysql --with-pdo-pgsql #支持pgsql --enable-pcntl
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

显示如下的提示,说明可以继续安装了
在这里插入图片描述编译安装,安装时间比较长,请耐心等待!

make && make install
  • 1

编译完成后会显示类似如下信息:
里面包含了各种文件的地址,建议编译后截图保存,方便日后查看
在这里插入图片描述

4.添加系统用户

添加用户组,名字用www是因为通常php做web后端开发的,可以改成别的。

groupadd www
  • 1

添加用户(一个不允许登录的用户)

useradd -g www -s /sbin/nologin www
  • 1

5.配置

将配置文件复制到正确的位置(很多情况下修改配置不生效就是配置文件地址没搞对)

cp /usr/local/php-8.2.10/php.ini-development /usr/local/php/lib/php.ini
  • 1
cp /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf
  • 1
cp /etc/php/php-fpm.d/www.conf.default /etc/php/php-fpm.d/www.conf
  • 1

6.配置环境变量

vi /etc/profile
  • 1

在PATH中添加,和其它的目录用:分隔开(如果找不到PATH,用第二种方式)

/usr/local/php/bin
  • 1

第一种方式:类似如下(写的详细些,一些新手对环境变量理解不够)
在这里插入图片描述第二种方式:直接在文件的最下面加入下面

export PATH=$PATH:/usr/local/php/bin
  • 1

保存退出后,在命令行刷新环境变量

source /etc/profile
  • 1

输入以下命令,如果能够返回版本号,说明配置成功

php -v
  • 1

正确返回如下的信息
在这里插入图片描述

7.配置php

修改默认session位置
创建session地址(也可以写成别的)

mkdir /usr/local/php/tmp && chmod -R 755 /usr/local/php/tmp
  • 1

修改php.ini

vi /usr/local/php/lib/php.ini
  • 1

找到session.save_path,修改后面内容为"/usr/local/php/tmp"(原本是“/tmp”)
找到expose_php = On;,修改On为Off。这个修改是在响应头中隐藏php信息。否则在响应头的X-Powered-By中会显示php版本(尽量不要让入侵者获取更多的信息)

修改默认open_basedir
允许php访问的地址,可以在php配置,也可以在nginx配置(如果两者都配置了,以php为主)

vi /usr/local/php/lib/php.ini
  • 1

找到open_basedir,然后添加需要的目录

配置php-fpm

vi /etc/php/php-fpm.d/www.conf
  • 1

修改user=www,group=www(原本都是nobody)

8.systemctl管理(php-fpm)

创建脚本文件

vi /usr/lib/systemd/system/php-fpm.service
  • 1

内容如下

[Unit] Description=php-fpm After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/php/sbin/php-fpm ExecReload=/bin/kill -USR2 $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

刷新systemctl

systemctl daemon-reload
  • 1

开启、开机启动

systemctl start php-fpm && systemctl enable php-fpm && systemctl status php-fpm
  • 1

至此php编译安装和php-fpm的启动就完成了
注意:php有两种常见的运行方式,apache和nginx的调用方式不同,nginx调用php-fpm。


9.常用的php基本命令

命令行下操作
查看配置文件的位置

php --ini
  • 1

确定php cli安装了哪些拓展

php -m
  • 1

10.php配置外部组件

陆续更新增加链接,包括但不限于以下
php配置nginx: php配置nginx

php增加redis拓展支持: php配置redis

php增加mongodb拓展支持:php配置mongodb

php增加rabbitmq拓展支持

php增加swoole拓展支持

php多版本并存

composer使用:composer安装和使用

jit开启及配置: php开启jit

11.复制编译好的php到新设备

编译时间较长,而且如果内存只有1g(通常是云服务器),无法正常编译。
1)在新设备上安装依赖
2)将编译后的文件夹复制到新设备的相同位置(/usr/local/php)
3)将配置文件复制到新设备的相同位置(/etc/php)
4)配置环境变量
5)配置systemctl

12.可能的报错openssl

如果openssl报错,安装openssl3即可
openssl官网下载地址

cd /usr/local
  • 1
wget https://www.openssl.org/source/openssl-3.0.12.tar.gz
  • 1
tar -zxvf openssl-3.0.12.tar.gz && cd openssl-3.0.12
  • 1
./config
  • 1
make && make install
  • 1
ldconfig /usr/local/lib64/
  • 1

13.bash脚本一键编译安装(参考)

仅支持deb系,暂时不支持suse系edhat系,仅供参考,每台设备不太一样,需要自己调整。

创建文件

vi /usr/local/php82.sh
  • 1

内容如下

#!/bin/bash # 常量设置 php_version="8.2.10" # php版本 install_path="/usr/local" # 安装、操作目录 # 安装依赖 echo "......正在安装依赖......" apt-get install -y build-essential autoconf automake libtool libsqlite3-dev pkg-config libjpeg-dev libpng-dev libxml2-dev libbz2-dev libcurl4-gnutls-dev libssl-dev libffi-dev libwebp-dev libonig-dev libzip-dev echo "......依赖安装完成......" # 下载php源码包 echo "......正在下载源码包......" cd ${install_path} wget -P ${install_path} https://www.php.net/distributions/php-${php_version}.tar.gz echo "......源码包下载完成......" # 解压缩 echo "......正在解压缩源码包......" tar -zxf ${install_path}/php-${php_version}.tar.gz echo "......源码包解压缩完成......" # 编译安装 echo "......正在编译安装......" ${install_path}/php-${php_version}/configure --prefix=${install_path}/php --sysconfdir=/etc/php --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring --with-imap-ssl --with-mysqli --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl cd ${install_path}/php-${php_version} && make && make install echo "......编译安装完成......" # 添加用户组和用户 echo "......正在添加用户组和用户......" groupadd www && useradd -g www -s /sbin/nologin www echo "......完成添加用户组和用户......" # 配置文件复制 echo "......正在复制配置文件......" cp ${install_path}/php-${php_version}/php.ini-development ${install_path}/php/lib/php.ini cp /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf cp /etc/php/php-fpm.d/www.conf.default /etc/php/php-fpm.d/www.conf echo "......复制配置文件完成......" # 配置环境变量 echo "......正在配置环境变量......" echo "export PATH=\$PATH:/usr/local/php/bin" >> /etc/profile . /etc/profile echo "......配置环境变量完成......" # 配置php echo "......正在配置php配置文件......" ## 创建session文件夹 mkdir ${install_path}/php/tmp && chmod -R 755 ${install_path}/php/tmp ## 修改配置文件(/usr/local/php/lib/php.ini)中的地址 sed -i 's/;session.save_path = "\/tmp"/session.save_path = "\/usr\/local\/php\/tmp"/g' /usr/local/php/lib/php.ini ## 修改配置文件(/etc/php/php-fpm.d/www.conf)中的用户 sed -i 's/user = nobody/user = www/g' /etc/php/php-fpm.d/www.conf sed -i 's/group = nobody/group = www/g' /etc/php/php-fpm.d/www.conf echo "......配置php配置文件完成......" # 配置systemctl脚本 echo "......正在配置systemctl脚本......" cat>/usr/lib/systemd/system/php-fpm.service<<EOF [Unit] Description=php-fpm After=syslog.target network.target [Service] Type=forking ExecStart=${install_path}/php/sbin/php-fpm ExecReload=/bin/kill -USR2 \$MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start php-fpm systemctl enable php-fpm systemctl status php-fpm echo "......systemctl脚本配置完成......" echo "......!!!脚本运行完成!!!......"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

运行文件

sh /usr/local/php82.sh
  • 1
标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索