Debian 10编译构建PHP 8

编译PHP 8需要1G以上内存,如果内存不足,可以增加Swap:Linux主机设置Swap虚拟内存

安装依赖:

apt install autoconf pkg-config build-essential php-pear libsqlite3-dev libbz2-dev libssl-dev libcurl4-openssl-dev libxml2-dev zlib1g-dev libpng-dev libwebp-dev libjpeg-dev libonig-dev libargon2-dev libxslt-dev libpcre2-dev libzip-dev

本文以PHP 8.2.23为例,下载源码包:

wget https://www.php.net/distributions/php-8.2.23.tar.gz

解压:

tar -xvf ./php-8.2.23.tar.gz

进入源码目录:

cd ./php-8.2.23

查看可用配置项:

./configure --help

开始配置:

./configure \
--enable-fpm  \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-fpm-systemd \
--disable-short-tags \
--enable-intl \
--with-mysqli \
--enable-mysqlnd \
--with-pdo-mysql \
--with-openssl \
--with-curl \
--enable-ftp \
--enable-gd \
--with-external-gd \
--with-webp \
--with-jpeg \
--enable-exif \
--with-gettext \
--with-mhash \
--enable-mbstring \
--enable-sockets \
--with-password-argon2 \
--with-xsl \
--with-zip \
--with-bz2 \
--enable-bcmath \
--with-external-pcre \
--enable-calendar

以上配置启用了一些常用扩展,但没有指定软件目录和配置文件目录,因为我更喜欢默认的路径。你可以根据需求加减配置项。

编译:

make

如果编译中出现以下提示,则可能是内存不足:

cc: fatal error: Killed signal terminated program cc1

禁用fileinfo可减少内存占用,但需要牺牲FileInfo扩展的功能:

--disable-fileinfo

安装:

make install

创建配置文件

拷贝php.ini文件:

cp php.ini-production /usr/local/php/php.ini

这里使用了生产环境版本,可以根据自己需求拷贝开发版本。

PHP-FPM启动后有两种进程,分别是主进程和进程池。生成PHP-FPM配置文件和进程池配置文件:

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf

启动PHP-FPM:

/usr/local/sbin/php-fpm

修改配置文件后可执行以下命令测试:

/usr/local/sbin/php-fpm -t

配置开机启动

添加php-fpm.service:

vi /etc/systemd/system/php-fpm.service

写入如下内容:

[Unit]
Description=PHP FastCGI process manager
After=local-fs.target network.target nginx.service

[Service]
Type=forking
ExecStart=/usr/local/sbin/php-fpm
#ExecReload=/bin/kill -USR2 \$MAINPID

[Install]
WantedBy=multi-user.target

重新加载新的配置文件及启动PHP-FPM:

systemctl daemon-reload
systemctl enable php-fpm

Nginx配置PHP支持

如果Nginx中没有进行PHP后缀配置,访问PHP页面时,浏览器会直接下载脚本到本地。

在Nginx的server块中,配置如下:

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;
}

如果希望Web服务器通过Socket文件与FPM通信,需要设置Socket文件进行指令监听:

sed -i 's/listen = 127.0.0.1:9000/listen =\/run\/php-fpm\/www.sock/g' \
/usr/local/etc/php-fpm.d/www.conf

检查www.conf中监听用户配置是否正确:

listen.owner = www-data
listen.group = www-data

重启PHP-FPM:

systemctl restart php-fpm

Nginx中的配置如下:

location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
}

更多Nginx的配置请参考:Debian 10安装配置Nginx Light

升级PHP版本

如果以后需要升级PHP版本,只需要重新编译安装即可,不会影响配置文件。

Typora