添加用户
useradd -r -s /sbin/nologin php-fpm
# -r 创建一个系统用户
# -s 指定登录的脚本 /sbin/nologin 不可登录的用户
# php-fpm 用户名,如果没有指定用户组会同时创建一个相同名字的用户组
下载解压安装包
cd ~
wget https://www.php.net/distributions/php-7.2.24.tar.gz
tar zxvf php-7.2.24.tar.gz
cd php-7.2.24
安装依赖
centos
安装依赖
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libxslt libicu-devel libxslt-devel
ubuntu
安装依赖
apt -y install gcc make openssl curl libbz2-dev libfreetype6-dev libzip-dev build-essential libexpat1-dev libgeoip-dev libpng-dev libpcre3-dev libssl-dev libxml2-dev rcs zlib1g-dev libmcrypt-dev libcurl4-openssl-dev libjpeg-dev libwebp-dev pkg-config
编译安装
./configure \
--prefix=/usr/local/php \
--with-mhash \
--with-openssl \
--with-config-file-path=/usr/local/php/etc \
--enable-short-tags \
--enable-fpm \
--with-fpm-user=php-fpm --with-fpm-group=php-fpm \
--enable-xml \
--with-libxml-dir \
--enable-bcmath \
--enable-calendar \
--enable-intl \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-zip \
--enable-mbregex \
--enable-mysqlnd \
--enable-mysqlnd-compression-support \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gd \
--enable-ftp \
--with-curl \
--with-xsl \
--with-iconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--enable-sysvsem \
--enable-inline-optimization \
--with-xmlrpc \
--with-gettext
编译错误
如果编译发生错误,一般都是缺少相应的依赖或依赖的版本比较低,根据错误提示安装或升级相应的依赖
编辑配置文件
# 将安装包中的配置文件复制到 /usr/local/etc 目录中
cp ./php.ini-development ./php.ini-production /usr/local/php/etc
# 复制一份配置文件并命名为 php.ini
cp /usr/local/php/etc/php.ini-development /usr/local/php/etc/php.ini
# 复制 php-fpm 配置文件并重命名
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# 复制 www.conf 配置文件并重命名
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
配置环境变量
vim /etc/profile
# 添加以下
export PATH=$PATH:/usr/local/php/bin
创建 php-fpm 启动脚本
如果找不到安装包中的 init.d.php-fpm
可以参考文章最后附上的代码,进行修改
cd ~/php-7.2.24/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
配置开机自启
# centos 方式
chkconfig add php-fpm
# 通过方式
vim /etc/rc.local
# 最后一行添加启动命令
/etc/init.d/php-fpm start
php-fpm
启动脚本代码
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN --daemonize $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-quit"
exit 1
else
echo " done"
fi
;;
status)
if [ ! -r $php_fpm_PID ] ; then
echo "php-fpm is stopped"
exit 0
fi
PID=`cat $php_fpm_PID`
if ps -p $PID | grep -q $PID; then
echo "php-fpm (pid $PID) is running..."
else
echo "php-fpm dead but pid file exists"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
configtest)
$php_fpm_BIN -t
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
exit 1
;;
esac