前言
初衷:为了记录php源码安装及添加swoole扩展的命令。
环境:
阿里云服务器 linux
centos7.6
php7.2.2.1
一、PHP源码安装
1.先更新yum源及添加后续操作会用到的扩展。
已经装过就的忽略~
yum -y update
yum -y install wget
yum -y install lrzsz
yum -y install epel-release
yum -y install libmcrypt libmcrypt-devel
yum -y install openssl-devel
yum -y install curl-devel
yum -y install php-mcrypt
yum -y install gcc
yum -y install gcc+
yum -y install gcc-c++
yum -y install make gd-devel libjpeg-devel libpng libpng-devel libxml2-devel bzip2 bzip2-devel libcurl-devel libaio
yum -y install autoconf
yum -y install git
yum -y install freetype-devel
yum -y install libicu-devel
yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap
2.下载PHP源码并解压
wget https://www.php.net/distributions/php-7.2.21.tar.bz2
也可以到官网下载再通过rz上传到服务器
解压下载的压缩文件
tar -xjvf php-7.2.21.tar.bz2
进入解压完的目录
3.检测环境及编译安装
configure:监测软件依赖关系,对即将安装的软件进行配置,检测环境例如检测是否有gcc扩展等,下面几个基础参数介绍
--prefix:指定php的安装路径
--with-config-file-path:指定php配置文件存放路径
--enable-fpm:添加PHP-FPM扩展
其它的可以通过./configure --help查看详细的参数
这里我是准备把PHP安装在/usr/local/php7.2路径下,配置文件存放的路径是/usr/local/php7.2/etc,这个是比较常规的路径存放。命令中的路径以实际需要存放的路径为准。
以下里面带了很多需要的扩展,看各自需求进行添加删除。
./configure --prefix=/usr/local/php7.2 --with-config-file-path=/usr/local/php7.2/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-ipv6 --disable-rpath --enable-dom --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-libmbfl --enable-ftp --with-gd --enable-gd-jis-conv --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --with-ldap=shared --without-gdbm
如果有报
configure: error: Cannot find ldap libraries in /usr/lib
执行以下命令
cp -frp /usr/lib64/libldap* /usr/lib/
make:构建,扩展提供的是源码包 需要编译成so文件php才能去加载这个so文件才能够使用
make install :装依赖
make
make install
将PHP源码目录中的配置文件复制到上面指定的配置文件路径,有两份配置文件,一份是开发版一份是生产的,这里使用的是开发板。
cp php.ini-development /usr/local/php7.2/etc/
cp php.ini-production /usr/local/php7.2/etc/
cp /usr/local/php7.2/etc/php.ini-production /usr/local/php7.2/etc/php.ini
执行命令查看路径是否对的上,如果对上了基本就OK了
/usr/local/php7.2/bin/php --ini
Configuration File (php.ini) Path: /usr/local/php7.2/etc
Loaded Configuration File: /usr/local/php7.2/etc/php.ini
这里注意下如果需要重新编译安装(例如因配置参数填错需要重装)最好将原先安装的PHP的目录删掉再进行编译安装
4.添加php命令到全局变量
vi /etc/profile
以下是profile中部分代码
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
最后一行添加以下代码,将PHP安装目录中的bin目录配置进全局PATH中
PATH=$PATH:/usr/local/php7.2/bin
export PATH
保存退出后执行以下命令后生效
source /etc/profile
5.开启php-fpm支持
拷贝php-fpm所需的配置文件去掉default
cp /usr/local/php7.2/etc/php-fpm.conf.default /usr/local/php7.2/etc/php-fpm.conf
cp /usr/local/php7.2/etc/php-fpm.d/www.conf.default /usr/local/php7.2/etc/php-fpm.d/www.conf
打开默认的www.conf配置文件,查看配置文件指定的user和group
vi /usr/local/php7.2/etc/php-fpm.d/www.conf
看到配置文件默认指定了用户和组都是www
user = www
group = www
创建对应的分组和用户
groupadd www
useradd -g www www
启动php-fpm服务
/usr/local/php7.2/sbin/php-fpm -R
配置php-fpm服务到systemctl,这个不是必须的没有需求可以跳过
编辑php-fpm配置文件
vi /usr/local/php7.2/etc/php-fpm.conf
将
;pid = run/php-fpm.pid
修改为
pid = run/php-fpm.pid
这样php-fpm运行就会将运行的进程号记录到php-fpm.pid文件中
创建php-fpm服务文件
touch /usr/lib/systemd/system/php-fpm.service
vim /usr/lib/systemd/system/php-fpm.service
添加内容
[Unit]
Description=php-fpm
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/usr/local/php7.2/var/run/php-fpm.pid
ExecStart=/usr/local/php7.2/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
PIDFile和ExecStart需改为对应文件实际的绝对路径
重新加载systemctll配置,启动服务
systemctl daemon-reload
systemctl start php-fpm
通常刚配置完启动后都会报端口冲突,可以通过
systemctl status php-fpm
查看是否是通过冲突,是的话找到php-fpm的进程号杀掉就可以或者直接
killall php-fpm
就OK了
常用的systemctl管理命令
启动服务
systemctl start php-fpm
查看状态
systemctl status php-fpm
停止服务
systemctl stop php-fpm
重启服务
systemctl restart php-fpm
修改配置文件后重载
systemctl reload php-fpm
开机自启动
systemctl enable php-fpm
禁止开机自启动
systemctl didable php-fpm
二丶添加Swoole扩展
1.下载swoole源码
git clone https://gitee.com/swoole/swoole.git
cd 到swoole 执行以下命令用于生成configure
/usr/local/php7.2/bin/phpize
指定pay-config 进行检测及配置,这里多加了一个启用异步Redis客户端
./configure --with-php-config=/usr/local/php7.2/bin/php-config --enable-async-redis
make
make install
最后在php.ini里添加
extension=swoole.so
END