本文参考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)