本章将会带领你在 CentOS 7.4 系统上编译安装 PHP 7.2 环境,以及缺少的拓展安装。

下载源码

我们打开PHP 官网下载页找到最新的 PHP 7.2 版本,以 7.2.9 为例:

我们点击绿色框部分的的地址,最后我们通过选择地区后得到最终地址为:http://cn2.php.net/distributions/php-7.2.9.tar.xz

我们得到文件下载地址后,登入 Linux,我们现在在服务器下载 PHP 源码,下载我们使用 curl 命令下载,检查你的服务器是否有这个命令输入 curl --help 如果有很大一串内容输出,则表示有该命令,如果输出内容为:

-bash: curl: command not found
1

那么,我们使用 CentOS 自带的 yum 命令进行安装:

yum install -y curl
1

等待命令执行完成即可,执行完成后,我们下载 PHP 源码:

curl -o php-7.2.9.tar.xz http://cn2.php.net/distributions/php-7.2.9.tar.xz
1

WARNING

如果你无法找到准确的文件下载地址,那么你点击绿色框的链接,会进入地区选择页面,例如你选择 China 地区,你会看到一个 cn2.php.net 的链接,鼠标放上去,「右键」点击「复制链接地址」你粘贴后会得到 http://cn2.php.net/get/php-7.2.9.tar.xz/from/this/mirror 这样的地址,如图:

复制得到地址后,我们运行下面的命令进行下载:

curl -L -o php-7.2.9.tar.xz http://cn2.php.net/get/php-7.2.9.tar.xz/from/this/mirror
1

解压源码

解压源码之前,请先下载解压工具:

yum install -y tar xz
1

然后我们先将 XZ 归档解压为 tar 归档:

xz -d php-7.2.9.tar.xz
1

执行完成后,我们输入 ls 命令,你会看到现在 php-7.2.9.tar.xz 文件已经消失,而多出一个 php-7.2.9.tar 归档。此时我们来解压这个 tar 归档:

tar -xvf php-7.2.9.tar
1

解压完成后,运行 ls 命令会看到,多出一个 php-7.2.9 的目录了,好了我们现在就得到了源码。

如果你解压步骤失败,可能是下载的文件不是 .tar.xz 后缀归档,也有可能是下载过程中数据丢包,不用担心。你重新下运行 rm -rf php-7.2.9* 命令,将你之前下载的删除,然后重新下载即可。

编译 PHP

编译 PHP 之前我们需要安装 PHP 编译工具和依赖:

yum install -y gcc autoconf gcc-c++ \
libxml2 libxml2-devel \
openssl openssl-devel \
bzip2 bzip2-devel \
libcurl libcurl-devel \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
gmp gmp-devel \
readline readline-devel \
libxslt libxslt-devel \
libmcrypt libmcrypt-devel \
mhash mhash-devel \
systemd-devel openjpeg-devel
1
2
3
4
5
6
7
8
9
10
11
12
13
14

安装完编译工具和依赖后,我们需要为 FPM 分配一个运行用户和用户组(我们取名 php-fpm:php-fpm 并设置不予怒登录和不创建家目录):

groupadd php-fpm && useradd -s /sbin/nologin -g php-fpm -M php-fpm
1

现在,我们使用 cd php-7.2.9 进入源码目录,上面都是开始编译前的必要设置,但是我们还有一步没有完成,就是生成编译配置(如果你很想知道下面的参数有什么用,请访问这里查看参数详解):

./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-xmlreader \
--enable-xmlwriter \
--enable-soap \
--enable-calendar \
--with-curl \
--with-zlib \
--with-gd \
--with-pear \
--with-pdo-sqlite \
--with-pdo-mysql \
--with-mysqli \
--with-mysql-sock \
--enable-mysqlnd \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-openssl \
--enable-ftp \
--with-kerberos \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-fpm-systemd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

等待完成,然后我们执行编译:

make
1

这个过程会非常的缓慢,主要是看机器,你的服务器配置比较好就很快,一般而言差不多半小时到两小时都是正常的。执行完成后,我们推荐执行一次 make test 命令,如果你觉得没必要浪费时间,请直接执行:

make install
1

执行完成后,你会看到 php-7.2.9 目录下有 php.ini-developmentphp.ini-production 两个文件,因为我们是教程,所以选择开发环境的配置文件:

cp php.ini-development /usr/local/php/etc/php.ini
1

复制完成后,我们进入 /usr/local/php/etc 目录:

cd /usr/local/php/etc
1

并执行 ls 命令,你会看到有一个 php-fpm.conf.default 文件,这个是 FPM 配置文件,目前是不会被加载的,我们执行:

cp php-fpm.conf.default php-fpm.conf
1

将其复制为可使用的配置文件,接着允许 yum install -y vim 下载一个编辑器,下载完成后我们执行:

vim php-fpm.conf
1

会进入编辑模式,如果你不会用 Linux 下的 Vim 软件,请自信使用搜索引擎学习,编辑内容如下:

错误日志:

error_log = /usr/local/php/var/log/php-fpm.log
1

PID 文件配置

pid = /usr/local/php/var/run/php-fpm.pid
1

然后保存并退出,我们再只 cd /usr/local/php/etc/php-fpm.d 进入 FPM 配置目录,这个目录下有一个 www.conf.default 文件,我们执行 cp www.conf.default www.conf 命令将其发布为可被加载的配置文件。

接下来,我们需要对 FPM 做一些系统级的配置,我们进入之前解压的 PHP 源码目录,如果你跟随教程执行下来,应该在 /root/php-7.2.9 目录,如果不是,自行进入你下载后解压的所在目录。进入该目录后,我们复制服务文件:

cp ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/
1

复制成功后,我们来设置开机启动 FPM:

systemctl enable php-fpm
1

当然,我们现在直接执行 php -v 还无法找到 PHP 命令,所以,我们编辑将 /usr/local/php/bin/ 加入到环境变量:

vim /etc/profile
1

打开文件后我们在结尾写入:

export PATH=$PATH:/usr/local/php/bin/
1

写入后,并不会立刻生效,所以我们执行 source /etc/profile 执行完成后,我们运行 php -v 会输出 PHP 版本信息,差不多下面这样子:

PHP 7.2.9 (cli) (built: Sep 18 2018 12:16:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
1
2
3

现在,我们需要检查环境是否符合我们 Plus 程序的需要,所以请将下面的内容写入到测试脚本中,测试脚本我命名为 plus-test.php 内容如下:

<?php

declare(strict_types=1);

echo 'exec function: ', function_exists('exec') ? '1' : '0', PHP_EOL;
echo 'system function: ', function_exists('system') ? '1' : '0', PHP_EOL;
echo 'scandir function: ', function_exists('scandir') ? '1' : '0', PHP_EOL;
echo 'symlink function: ', function_exists('symlink') ? '1' : '0', PHP_EOL;
echo 'shell_exec function: ', function_exists('shell_exec') ? '1' : '0', PHP_EOL;
echo 'proc_open function: ', function_exists('shell_exec') ? '1' : '0', PHP_EOL;
echo 'proc_get_status function: ', function_exists('proc_get_status') ? '1' : '0', PHP_EOL;
1
2
3
4
5
6
7
8
9
10
11

注意,上面需要的函数都是 Console 也就是 CLI 环境下使用,这里配置细节之后会详细讲解。

写入进去并保存退出后,我们执行 php plus-test.php 输出内容正确的应该如下:

exec function: 1
system function: 1
scandir function: 1
symlink function: 1
shell_exec function: 1
proc_open function: 1
proc_get_status function: 1
1
2
3
4
5
6
7

如果你按照教程进行安装,到这里输出结果都会如上。自行安装的请百度 php 解锁禁用函数。

到这里,我们编译安装 PHP 就算完成

命令

  • systemctl enable php-fpm 开启 FPM 开机启动
  • systemctl disable php-fpm 关闭 FPM 开机启动
  • systemctl start php-fpm 启动 FPM
  • systemctl stop php-fpm 关闭 FPM
  • systemctl restart php-fpm 重启 FPM
  • systemctl status php-fpm 查看 FPM 运行状态
  • systemctl kill php-fpm 杀死 FPM
更新时间: 10/19/2018, 10:03:46 AM