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版本,只需要重新编译安装即可,不会影响配置文件。