Loading [MathJax]/jax/output/HTML-CSS/config.js

本文参考Ubuntu 22.04 源码编译安装 PHP7.4 使用OpenSSL1.1.1版本
本文安装的php8.3,安装php7及以下版本时需使用OpenSSL1.1.1,与Ubuntu 22.04自带的3.0.2 15相冲突,请根据上文进行调整
假定已安装好nginx
为便于与nginx协调工作,本文中将php-fpm的执行用户设定为nginx,用nginx用户编译安装,可根据自己的实际情况进行调整

创建相关文件系统

root用户下操作:

lvcreate -n lvphp -L 10G rootvg
mkdir /usr/php
mkfs.xfs /dev/rootvg/lvphp
echo -e "/dev/rootvg/lvphp\t/usr/php\txfs\tdefaults\t0\t0">>/etc/fstab
mount  -a
df -h
chown nginx:nginx /usr/php

安装依赖

root用户下:

#Ubuntu
apt update
#安装编译工具
apt install -y gcc g++ make pkg-config libc-dev
#安装基本开发库
apt install -y autoconf re2c bison libsqlite3-dev libpq-dev libonig-dev libfcgi-dev libfcgi0ldbl libjpeg-dev libpng-dev libssl-dev libxml2-dev libcurl4-openssl-dev libxpm-dev libgd-dev libmysqlclient-dev libfreetype6-dev libxslt1-dev libpspell-dev libzip-dev libgccjit-10-dev libmagickwand-dev



#Redhat下:
yum install -y gcc gcc-c++ make pkgconfig glibc-devel
yum install -y autoconf re2c bison sqlite-devel postgresql-devel oniguruma fcgi-devel fcgi libjpeg-turbo-devel libpng-devel openssl-devel libxml2-devel libcurl-devel libxpm-devel gd-devel mariadb-devel freetype-devel libxslt-devel aspell-devel libzip-devel gcc-jit-devel ImageMagick-devel
libxml2-devel sqlit-devel libcurl-devel libpng-devel libjpeg-turbo-devel freetype-devel libicu-devel  libpq-devel libxslt-devel

以下为上述依赖的解释说明(来自ChatGPT):

编译工具:

  • gcc:GNU 编译器集合,用于编译 C 语言源代码。
  • g++:GNU 编译器集合(GCC)的 C++ 编译器
  • make:构建工具,用于执行 Makefile 中定义的构建任务。
  • pkg-config:用于在编译时查询已安装库的版本信息。
  • libc-dev:C 标准库的开发文件,提供了一组 C 标准函数的实现,是编译 C 语言程序所需的头文件和库文件。

开发库:

  • autoconf:自动配置工具,用于生成配置脚本以便于编译 PHP。
  • re2c:词法分析器生成器,用于生成 PHP 的词法分析器。
  • bison:用于生成解析器的工具,PHP 的解析器(Parser)需要使用它。
  • libsqlite3-dev:SQLite 数据库的开发文件,如果您打算在 PHP 中使用 SQLite 扩展,则需要这个库。
  • libpq-dev:PostgreSQL 数据库的开发文件,用于与 PostgreSQL 数据库交互。
  • libonig-dev:正则表达式库的开发文件,PHP 使用 Oniguruma 正则表达式引擎,该库提供了正则表达式功能。
  • libfcgi-dev 和 libfcgi0ldbl:FastCGI 协议的开发文件和库文件,用于与 FastCGI 进程通信。
  • libjpeg-dev、libpng-dev、libssl-dev、libxml2-dev、libcurl4-openssl-dev、libxpm-dev、libgd-dev、libmysqlclient-dev、libfreetype6-dev、libxslt1-dev、libpspell-dev、libzip-dev:这些都是各种 PHP 扩展所需要的开发文件,用于与 JPEG、PNG、SSL、XML、cURL、XPM、GD、MySQL、FreeType、XSLT、PSpell 和 Zip 等相关的库进行交互。
  • libgccjit-10-dev:GCC 的 JIT 支持的开发文件,对于编译 PHP 并不是必需的,这通常用于开发需要 JIT 编译技术的项目。
  • libmagickwand-dev:安装 Imagick 扩展的必要依赖项,非必需。

编译安装

nginx用户下

cd ~/
curl -kL -O https://www.php.net/distributions/php-8.3.11.tar.gz
tar -zxf php-8.3.11.tar.gz
cd ~/php-8.3.11
#./buildconf #上述方法下载的源文件已完成bulid,无需此步骤

./configure \
 --prefix=/usr/php/php-8.3.6 \
 --with-config-file-path=/usr/php/php-8.3.6/etc \
 --enable-cli \
 --enable-fpm \
 --enable-intl \
 --enable-mbstring \
 --enable-opcache \
 --enable-sockets \
 --enable-soap \
 --enable-gd \
 --enable-bcmath \
 --with-curl \
 --with-freetype \
 --with-fpm-user=nginx \
 --with-fpm-group=nginx \
 --with-jpeg \
 --with-mysql-sock \
 --with-mysqli \
 --with-openssl \
 --with-pdo-mysql \
 --with-pgsql \
 --with-xsl \
 --with-zlib \
 --with-pspell


make -j$(nproc) && make install

配置php配置文件

nginx用户下:

cp ~/php-8.3.6/php.ini-production /usr/php/php-8.3.6/etc/php.ini
cp /usr/php/php-8.3.6/etc/php-fpm.conf.default /usr/php/php-8.3.6/etc/php-fpm.conf
cp /usr/php/php-8.3.6/etc/php-fpm.d/www.conf.default /usr/php/php-8.3.6/etc/php-fpm.d/www.conf

编辑php.ini,修改cgi.fix_pathinfo的值为0阻止 Nginx 将请求发送到后端的 PHP-FPM 模块

添加PATH:

echo 'PATH=/usr/php/php-8.3.6/bin:/usr/php/php-8.3.6/sbin:$PATH'>>/etc/profile
source /etc/profile

安装拓展(Imagick为例)

先完成前置步骤,然后下载源码进行编译

curl -kL -O http://pecl.php.net/get/imagick-3.7.0.tgz
cd imagick-3.7.0/
phpize
./configure
make
make install

然后编辑php.ini启用该模块

[Imagick]
extension=imagick.so

如果php-fpm已启动,重启即可加载生效。

启动php-fpm

/usr/php/php-8.3.6/sbin/php-fpm -c /usr/php/php-8.3.6/etc/php-fpm.conf

配置nginx

修改nginx conf文件,修改默认的 location 块,使其支持 .php 文件:

location / {
    root   html;
    index  index.php index.html index.htm;
}

下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

重启 Nginx,创建测试文件至html根目录访问检验:

echo "<?php phpinfo(); ?>" >> $HTML/index.php

配置自启动

添加启动命令至rc.local即可。

sed -i '$i\su - nginx -c "/usr/php/php-8.3.6/sbin/php-fpm -c /usr/php/php-8.3.6/etc/php-fpm.conf"' /etc/rc.local 


如需停止php-fpm,使用kill -15 $(pidof php-fpm)

作者 Assaultcore

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注