本文是在 原文 基础上,增加了作者自己实操中的一些经验。不足之处还请各位大佬指教。

说明
安装LNMP环境一般是先安装mysql/mariadb, 再安装nginx, 其次是安装php
安装依赖包

[root@localhost ~]# yum -y install gcc
[root@localhost ~]# yum -y install gcc-c++
[root@localhost ~]# yum -y install wget
[root@localhost ~]# yum -y install make
[root@localhost ~]# yum -y install libxml2
[root@localhost ~]# yum -y install libxml2-devel
[root@localhost ~]# yum -y install openssl
[root@localhost ~]# yum -y install openssl-devel
[root@localhost ~]# yum -y install curl-devel
[root@localhost ~]# yum -y install libjpeg-devel
[root@localhost ~]# yum -y install libpng-devel
[root@localhost ~]# yum -y install freetype-devel
[root@localhost ~]# yum -y install bison
[root@localhost ~]# yum -y install autoconf

创建用户及用户组
创建php用户组
> 创建php用户组(-r选项是创建一个系统用户组的意思)

[root@localhost ~]# groupadd -r php

创建用户并加入到php系统用户组
> 添加新用户
> -r: 添加系统用户( 这里指将要被创建的系统用户php )
> -g: 指定要创建的用户所属组( 这里指添加到新系统用户php到php系统用户组 )
> -s: 新帐户的登录shell( /sbin/nologin 这里设置为将要被创建系统用户php不能用来登录系统 )
> -d: 新帐户的主目录( 这里指定将要被创建的系统用户php的家目录为 /usr/local/php )
> -M: 不要创建用户的主目录( 也就是说将要被创建的系统用户php不会在 /home 目录下创建 php 家目录 )

[root@localhost ~]# useradd -r -g php -s /sbin/nologin -d /usr/local/php -M php

下载php7.1并解压
下载

[root@localhost ~]# wget -c https://github.com/php/php-src/archive/php-7.1.6.tar.gz

解压

[root@localhost ~]# tar -zxvf php-7.1.6.tar.gz

下载并安装php依赖
PHP语法分析器re2c
下载

[root@localhost ~]# wget -c https://github.com/skvadrik/re2c/releases/download/0.16/re2c-0.16.tar.gz

解压

[root@localhost ~]# tar -zxvf re2c-0.16.tar.gz

进入解压后的源码目录编译并安装

[root@localhost ~]# cd re2c-0.16
[root@localhost re2c-0.16]# ./configure
[root@localhost re2c-0.16]# make && make install

如果解压后没有configure,请尝试以下方法安装,参考文献

[root@localhost re2c-0.16]# mkdir -p m4
[root@localhost re2c-0.16]# ./autogen.sh
[root@localhost re2c-0.16]# ./configure
[root@localhost re2c-0.16]# make && make install

检查是否安装成功

[root@localhost re2c-0.16]# re2c -v
re2c 0.16

加密支持扩展库libmcrypt
使用php mcrypt 前必须先安装Libmcrypt
下载

[root@localhost ~]# wget -c https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz

解压

[root@localhost ~]# tar -zxvf libmcrypt-2.5.8.tar.gz

进入解压后的源码目录编译并安装

[root@localhost ~]# cd libmcrypt-2.5.8
[root@localhost libmcrypt-2.5.8]# ./configure
[root@localhost libmcrypt-2.5.8]# # make && make install

加密方式扩展库mhash
下载

[root@localhost ~]# wget -c https://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz

解压

[root@localhost ~]# tar -zxvf mhash-0.9.9.9.tar.gz

进入解压后的源码目录编译并安装

[root@localhost mhash-0.9.9.9]# cd mhash-0.9.9.9
[root@localhost mhash-0.9.9.9]# ./configure
[root@localhost mhash-0.9.9.9]# make && make install

加密方式扩展库mcrypt
下载

[root@localhost ~]# wget -c https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

解压

[root@localhost ~]# tar -zxvf mcrypt-2.6.8.tar.gz

由于在编译mcrypt时,会找不到libmcrypt的链接库,导致无法编译,因为Libmcrypt的链接库在/usr/local/lib文件夹下
> 所以,在编译mcrypt时要加入LD_LIBRARY_PATH=/usr/local/lib导入间接库
> 进入解压后的源码目录编译并安装

[root@localhost ~# cd mcrypt-2.6.8
[root@localhost mcrypt-2.6.8]# ./configure LD_LIBRARY_PATH=/usr/local/lib
[root@localhost mcrypt-2.6.8]# make && make install

编译php7.1
到目录为止所有的准备工作已经完成, 接下来就是编译php7.1了!
查看源码目录文件具体内容

[root@localhost php-src-php-7.1.6]# ll
total 1252
-rw-rw-r--.  1 root root  82506 Jun  7 04:05 acinclude.m4
drwxrwxr-x.  2 root root     78 Jun  7 04:05 appveyor
drwxrwxr-x.  2 root root   4096 Jun  7 04:05 build
-rwxrwxr-x.  1 root root    772 Jun  7 04:05 buildconf
-rw-rw-r--.  1 root root    334 Jun  7 04:05 buildconf.bat
-rw-rw-r--.  1 root root  11982 Jun  7 04:05 CODING_STANDARDS
-rw-rw-r--.  1 root root  42938 Jun  7 04:05 config.guess
-rw-rw-r--.  1 root root  35987 Jun  7 04:05 config.sub
-rw-rw-r--.  1 root root  46774 Jun  7 04:05 configure.in
-rw-rw-r--.  1 root root   3163 Jun  7 04:05 CONTRIBUTING.md
-rw-rw-r--.  1 root root     91 Jun  7 04:05 CREDITS
drwxrwxr-x. 75 root root   4096 Jun  7 04:05 ext
-rw-rw-r--.  1 root root  20917 Jun  7 04:05 EXTENSIONS
-rw-rw-r--.  1 root root    137 Jun  7 04:05 footer
-rwxrwxr-x.  1 root root    581 Jun  7 04:05 genfiles
-rw-rw-r--.  1 root root   1143 Jun  7 04:05 header
-rw-rw-r--.  1 root root  87836 Jun  7 04:05 INSTALL
-rw-rw-r--.  1 root root   3218 Jun  7 04:05 LICENSE
-rw-rw-r--.  1 root root 199728 Jun  7 04:05 ltmain.sh
drwxrwxr-x.  3 root root   4096 Jun  7 04:05 main
-rwxrwxr-x.  1 root root   4129 Jun  7 04:05 makedist
-rw-rw-r--.  1 root root   1088 Jun  7 04:05 Makefile.frag
-rw-rw-r--.  1 root root   2485 Jun  7 04:05 Makefile.gcov
-rw-rw-r--.  1 root root   7236 Jun  7 04:05 Makefile.global
-rw-rw-r--.  1 root root   5317 Jun  7 04:05 makerpm
drwxrwxr-x.  2 root root     40 Jun  7 04:05 netware
-rw-rw-r--.  1 root root 135093 Jun  7 04:05 NEWS
drwxrwxr-x.  2 root root     65 Jun  7 04:05 pear
-rw-rw-r--.  1 root root   1489 Jun  7 04:05 php.spec.in
-rw-rw-r--.  1 root root   2523 Jun  7 04:05 php.gif
-rw-rw-r--.  1 root root  71064 Jun  7 04:05 php.ini-development
-rw-rw-r--.  1 root root  71096 Jun  7 04:05 php.ini-production
-rw-rw-r--.  1 root root   7010 Jun  7 04:05 README.EXT_SKEL
-rw-rw-r--.  1 root root   5026 Jun  7 04:05 README.GIT-RULES
-rw-rw-r--.  1 root root   5417 Jun  7 04:05 README.input_filter
-rw-rw-r--.  1 root root   3426 Jun  7 04:05 README.MAILINGLIST_RULES
-rw-rw-r--.  1 root root   1608 Jun  7 04:05 README.md
-rw-rw-r--.  1 root root   6040 Jun  7 04:05 README.namespaces
-rw-rw-r--.  1 root root   5237 Jun  7 04:05 README.NEW-OUTPUT-API
-rw-rw-r--.  1 root root   7528 Jun  7 04:05 README.PARAMETER_PARSING_API
-rw-rw-r--.  1 root root  19766 Jun  7 04:05 README.REDIST.BINS
-rw-rw-r--.  1 root root  12934 Jun  7 04:05 README.RELEASE_PROCESS
-rw-rw-r--.  1 root root   5086 Jun  7 04:05 README.SELF-CONTAINED-EXTENSIONS
-rw-rw-r--.  1 root root  15355 Jun  7 04:05 README.STREAMS
-rw-rw-r--.  1 root root   8126 Jun  7 04:05 README.SUBMITTING_PATCH
-rw-rw-r--.  1 root root   6695 Jun  7 04:05 README.TESTING
-rw-rw-r--.  1 root root   4958 Jun  7 04:05 README.TESTING2
-rw-rw-r--.  1 root root   4261 Jun  7 04:05 README.UNIX-BUILD-SYSTEM
-rw-rw-r--.  1 root root    109 Jun  7 04:05 README.WIN32-BUILD-SYSTEM
-rwxrwxr-x.  1 root root  82234 Jun  7 04:05 run-tests.php
drwxrwxr-x. 10 root root   4096 Jun  7 04:05 sapi
drwxrwxr-x.  4 root root     99 Jun  7 04:05 scripts
-rwxrwxr-x.  1 root root   2104 Jun  7 04:05 server-tests-config.php
-rwxrwxr-x.  1 root root  52726 Jun  7 04:05 server-tests.php
-rwxrwxr-x.  1 root root    108 Jun  7 04:05 snapshot
-rw-rw-r--.  1 root root     10 Jun  7 04:05 stamp-h.in
-rw-rw-r--.  1 root root      1 Jun  7 04:05 stub.c
drwxrwxr-x. 10 root root   4096 Jun  7 04:05 tests
drwxrwxr-x.  3 root root     33 Jun  7 04:05 travis
drwxrwxr-x.  3 root root   4096 Jun  7 04:05 TSRM
-rw-rw-r--.  1 root root  23356 Jun  7 04:05 UPGRADING
-rw-rw-r--.  1 root root   3418 Jun  7 04:05 UPGRADING.INTERNALS
-rwxrwxr-x.  1 root root    159 Jun  7 04:05 vcsclean
drwxrwxr-x.  3 root root   4096 Jun  7 04:05 win32
drwxrwxr-x.  4 root root   4096 Jun  7 04:05 Zend

可以发现目录中并没有 configure 文件, 但是有一个名为 buildconf 的文件,嗯, 是它就是它, 我们要通过运行这个文件生成 configure 文件

生成php源码目录下的配置文件 configure
运行 buildconf 文件, 生成 configure 文件

[root@localhost php-src-php-7.1.6]# ./buildconf
You should not run buildconf in a release package.
use buildconf --force to override this check.

很不幸运, 并没有成功, 并且提示:
You should not run buildconf in a release package. # 你不应该在发布包运行buildconf文件。
use buildconf --force to override this check. # 使用buildconf文件重写此检查。

那就根据它的要求加入 --force 选项重写检查

[root@localhost php-src-php-7.1.6]# ./buildconf --force
Forcing buildconf
Removing configure caches
buildconf: checking installation...
buildconf: autoconf version 2.69 (ok)
rebuilding aclocal.m4
rebuilding configure
rebuilding main/php_config.h.in

这次可算是buildconf文件重写检查成功了, 看一下源码目录有没有 configure 文件

生成源码目录配置文件 configure 之后的目录

[root@localhost php-src-php-7.1.6]# ll
total 4260
-rw-rw-r--.  1 root root   82506 Jun  7 04:05 acinclude.m4
-rw-r--r--.  1 root root  312883 Jun 18 04:43 aclocal.m4
drwxrwxr-x.  2 root root      78 Jun  7 04:05 appveyor
drwxr-xr-x.  2 root root      51 Jun 18 04:43 autom4te.cache
drwxrwxr-x.  2 root root    4096 Jun  7 04:05 build
-rwxrwxr-x.  1 root root     772 Jun  7 04:05 buildconf
-rw-rw-r--.  1 root root     334 Jun  7 04:05 buildconf.bat
-rw-r--r--.  1 root root       0 Jun 18 04:43 buildmk.stamp
-rw-rw-r--.  1 root root   11982 Jun  7 04:05 CODING_STANDARDS
-rw-rw-r--.  1 root root   42938 Jun  7 04:05 config.guess
-rw-rw-r--.  1 root root   35987 Jun  7 04:05 config.sub
-rwxr-xr-x.  1 root root 2758685 Jun 18 04:43 configure
-rw-rw-r--.  1 root root   46774 Jun  7 04:05 configure.in
-rw-rw-r--.  1 root root    3163 Jun  7 04:05 CONTRIBUTING.md
-rw-rw-r--.  1 root root      91 Jun  7 04:05 CREDITS
drwxrwxr-x. 75 root root    4096 Jun  7 04:05 ext
-rw-rw-r--.  1 root root   20917 Jun  7 04:05 EXTENSIONS
-rw-rw-r--.  1 root root     137 Jun  7 04:05 footer
-rw-r--r--.  1 root root    1776 Jun 18 04:43 generated_lists
-rwxrwxr-x.  1 root root     581 Jun  7 04:05 genfiles
-rw-rw-r--.  1 root root    1143 Jun  7 04:05 header
-rw-rw-r--.  1 root root   87836 Jun  7 04:05 INSTALL
-rw-r--r--.  1 root root       0 Jun 18 04:43 install-sh
-rw-rw-r--.  1 root root    3218 Jun  7 04:05 LICENSE
-rw-rw-r--.  1 root root  199728 Jun  7 04:05 ltmain.sh
drwxrwxr-x.  3 root root    4096 Jun 18 04:43 main
-rwxrwxr-x.  1 root root    4129 Jun  7 04:05 makedist
-rw-rw-r--.  1 root root    1088 Jun  7 04:05 Makefile.frag
-rw-rw-r--.  1 root root    2485 Jun  7 04:05 Makefile.gcov
-rw-rw-r--.  1 root root    7236 Jun  7 04:05 Makefile.global
-rw-rw-r--.  1 root root    5317 Jun  7 04:05 makerpm
-rw-r--r--.  1 root root       0 Jun 18 04:43 missing
-rw-r--r--.  1 root root       0 Jun 18 04:43 mkinstalldirs
drwxrwxr-x.  2 root root      40 Jun  7 04:05 netware
-rw-rw-r--.  1 root root  135093 Jun  7 04:05 NEWS
drwxrwxr-x.  2 root root      65 Jun  7 04:05 pear
-rw-rw-r--.  1 root root    1489 Jun  7 04:05 php7.spec.in
-rw-rw-r--.  1 root root    2523 Jun  7 04:05 php.gif
-rw-rw-r--.  1 root root   71064 Jun  7 04:05 php.ini-development
-rw-rw-r--.  1 root root   71096 Jun  7 04:05 php.ini-production
-rw-rw-r--.  1 root root    7010 Jun  7 04:05 README.EXT_SKEL
-rw-rw-r--.  1 root root    5026 Jun  7 04:05 README.GIT-RULES
-rw-rw-r--.  1 root root    5417 Jun  7 04:05 README.input_filter
-rw-rw-r--.  1 root root    3426 Jun  7 04:05 README.MAILINGLIST_RULES
-rw-rw-r--.  1 root root    1608 Jun  7 04:05 README.md
-rw-rw-r--.  1 root root    6040 Jun  7 04:05 README.namespaces
-rw-rw-r--.  1 root root    5237 Jun  7 04:05 README.NEW-OUTPUT-API
-rw-rw-r--.  1 root root    7528 Jun  7 04:05 README.PARAMETER_PARSING_API
-rw-rw-r--.  1 root root   19766 Jun  7 04:05 README.REDIST.BINS
-rw-rw-r--.  1 root root   12934 Jun  7 04:05 README.RELEASE_PROCESS
-rw-rw-r--.  1 root root    5086 Jun  7 04:05 README.SELF-CONTAINED-EXTENSIONS
-rw-rw-r--.  1 root root   15355 Jun  7 04:05 README.STREAMS
-rw-rw-r--.  1 root root    8126 Jun  7 04:05 README.SUBMITTING_PATCH
-rw-rw-r--.  1 root root    6695 Jun  7 04:05 README.TESTING
-rw-rw-r--.  1 root root    4958 Jun  7 04:05 README.TESTING2
-rw-rw-r--.  1 root root    4261 Jun  7 04:05 README.UNIX-BUILD-SYSTEM
-rw-rw-r--.  1 root root     109 Jun  7 04:05 README.WIN32-BUILD-SYSTEM
-rwxrwxr-x.  1 root root   82234 Jun  7 04:05 run-tests.php
drwxrwxr-x. 10 root root    4096 Jun  7 04:05 sapi
drwxrwxr-x.  4 root root      99 Jun  7 04:05 scripts
-rwxrwxr-x.  1 root root    2104 Jun  7 04:05 server-tests-config.php
-rwxrwxr-x.  1 root root   52726 Jun  7 04:05 server-tests.php
-rwxrwxr-x.  1 root root     108 Jun  7 04:05 snapshot
-rw-rw-r--.  1 root root      10 Jun  7 04:05 stamp-h.in
-rw-rw-r--.  1 root root       1 Jun  7 04:05 stub.c
drwxrwxr-x. 10 root root    4096 Jun  7 04:05 tests
drwxrwxr-x.  3 root root      33 Jun  7 04:05 travis
drwxrwxr-x.  3 root root    4096 Jun  7 04:05 TSRM
-rw-rw-r--.  1 root root   23356 Jun  7 04:05 UPGRADING
-rw-rw-r--.  1 root root    3418 Jun  7 04:05 UPGRADING.INTERNALS
-rwxrwxr-x.  1 root root     159 Jun  7 04:05 vcsclean
drwxrwxr-x.  3 root root    4096 Jun  7 04:05 win32
drwxrwxr-x.  4 root root    4096 Jun  7 04:05 Zend

现在源码目录也就存在 configure 文件了

正式编译php7.1
如果使用此编译选项列表, 请将 \ 反斜线后面的注释去除, 并且后面不能有空白字符

[root@localhost php-src-php-7.1.6]# ./configure \--prefix=/usr/local/php \ [php安装的根目录]--exec-prefix=/usr/local/php \  [php执行文件所在目录]--bindir=/usr/local/php/bin \ [php/bin目录]--sbindir=/usr/local/php/sbin \ [php/sbin目录]--includedir=/usr/local/php/include \  [php包含文件所在目录]--libdir=/usr/local/php/lib/php \ [php/lib目录]--mandir=/usr/local/php/php/man \   [php/man目录]--with-config-file-path=/usr/local/php/etc \    [php的配置目录]--with-mysql-sock=/var/run/mysql/mysql.sock \    [php的Unix socket通信文件]--with-mcrypt \    [是php里面重要的加密支持扩展库,linux环境下该库在默认情况下不开启]--with-mhash \ [Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启]--with-openssl \  [OpenSSL 是一个安全套接字层密码库]--with-mysqli=shared,mysqlnd \   [php依赖mysql库]--with-pdo-mysql=shared,mysqlnd \ [php依赖mysql库]--with-gd \    [gd库]                                                --with-iconv \ [关闭iconv函数,种字符集间的转换]                        --with-zlib \    [zlib是提供数据压缩用的函式库]--enable-zip \    [打开对zip的支持]--enable-inline-optimization \   [优化线程]--disable-debug \ [关闭调试模式]--disable-rpath \   [关闭额外的运行库文件]--enable-shared \   [启用动态库]--enable-xml \   [开启xml扩展]--enable-bcmath \  [打开图片大小调整,用到zabbix监控的时候用到了这个模块]--enable-shmop \ [共享内存]--enable-sysvsem \    [内存共享方案]--enable-mbregex \  [开启多字节正则表达式的字符编码。]--enable-mbstring \   [开启多字节字符串函数]--enable-ftp \  [开启ftp]--enable-gd-native-ttf \ [开启gd库原有字体]--enable-pcntl \ [PHP的进程控制支持实现了Unix方式的多进程创建]        --enable-sockets \   [开启套节字]--with-xmlrpc \  [打开xml-rpc的c语言]--enable-soap \  [开启简单对象访问协议简单对象访问协议]--without-pear \    [开启php扩展与应用库]--with-gettext \   [开户php在当前域中查找消息]--enable-session \  [允许php会话session]--with-curl \   [允许curl扩展]--with-jpeg-dir \ [指定jpeg安装目录yum安装过后不用再次指定会自动找到]--with-freetype-dir \ [指定freetype安装目录yum安装过后不用再次指定会自动找到]--enable-opcache \    [开启使用opcache缓存]--enable-fpm \   [开启fpm]--with-fpm-user=nginx \ [php-fpm的用户]--with-fpm-group=nginx \   [php-fpm的用户组]--without-gdbm \   [数据库函数使用可扩展散列和类似于标准UNIX dbm的工作]--enable-fast-install \  [为快速安装优化]--disable-fileinfo \--with-php-config=/usr/local/bin/php-config \  [pdo_mysql扩展]--with-pdo-mysql=mysqlnd \--enable-maintainer-zts    [开启线程安全] (根据自身需要是否选择该项)

以下为方便粘贴使用(未开启线程安全,如需要开启请复制上方对应配置项执行即可)

./configure \--prefix=/usr/local/php \--exec-prefix=/usr/local/php \--bindir=/usr/local/php/bin \--sbindir=/usr/local/php/sbin \--includedir=/usr/local/php/include \--libdir=/usr/local/php/lib/php \--mandir=/usr/local/php/php/man \--with-config-file-path=/usr/local/php/etc \--with-mysql-sock=/tmp/mysql.sock \--with-mcrypt \--with-mhash \--with-openssl \--with-mysqli=shared,mysqlnd \--with-pdo-mysql=shared,mysqlnd \--with-gd \--with-iconv \--with-zlib \--enable-zip \--enable-inline-optimization \--disable-debug \--disable-rpath \--enable-shared \--enable-xml \--enable-bcmath \--enable-shmop \--enable-sysvsem \--enable-mbregex \--enable-mbstring \--enable-ftp \--enable-gd-native-ttf \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-soap \--without-pear \--with-gettext \--enable-session \--with-curl \--with-jpeg-dir \--with-freetype-dir \--enable-opcache \--enable-fpm \--with-fpm-user=nginx \--with-fpm-group=nginx \--without-gdbm \--enable-fast-install \--disable-fileinfo \--with-php-config=/usr/local/bin/php-config \--with-pdo-mysql=mysqlnd

可能会出现要求开启 --enable-opcache=on 的错误提示
> 错误提示
configure: error: Don’t know how to define struct flock on this system, set–enable-opcache=no
> 解决办法
编辑/etc/ld.so.conf
加入/usr/local/lib
执行ldconfig,使其重新加载一次
运行 make test
这一步不是必须的, 如果要运行可能会让你等很长一段时间
运行

[root@localhost php-src-php-7.1.6]# make test

结果

You may have found a problem in PHP.
This report can be automatically sent to the PHP QA team at
http://qa.php.net/reports and http://news.php.net/php.qa.reports
This gives us a better understanding of PHP's behavior.
If you don't want to send the report immediately you can choose
option "s" to save it.    You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]: YPlease enter your email address.
(Your address will be mangled so that it will not go out on any
mailinglist in plain text): warnerwu@126.comPosting to http://qa.php.net/buildtest-process.phpThank you for helping to make PHP better.

出现这个结果 make test 也就完成了!

安装

[root@localhost php-src-php-7.1.6]# make install

编译安装后的php目录

[root@localhost php-src-php-7.1.6]# ll /usr/local/php
total 0
drwxr-xr-x. 2 root root 100 Jun 18 05:57 bin
drwxr-xr-x. 3 root root  49 Jun 18 05:57 etc
drwxr-xr-x. 3 root root  16 Jun 18 05:57 include
drwxr-xr-x. 3 root root  16 Jun 18 05:57 lib
drwxr-xr-x. 4 root root  26 Jun 18 05:57 php
drwxr-xr-x. 2 root root  20 Jun 18 05:57 sbin
drwxr-xr-x. 4 root root  26 Jun 18 05:57 var

配置php
修改php配置文件之添加php配置文件
将php源码编译目录下的 php.ini-production 拷贝到php安装目录下的 etc 目录下

[root@localhost php-src-php-7.1.6]# cp php.ini-production /usr/local/php/etc/php.ini

修改php配置文件之修改php扩展目录所在位置
修改 php.ini 配置文件, 设置php扩展安装目录所在位置

[root@localhost php-src-php-7.1.6]# vim /usr/local/php/etc/php.ini

找到 extension_dir 修改扩展目录位置如下:
未开启线程安全:

extension_dir = "../lib/php/extensions/no-debug-non-zts-20160303/"

开启线程安全:

extension_dir = "../lib/php/extensions/no-debug-zts-20160303/"

上面写的扩展目录位置是使用的 相对路径 (不推荐,有可能会出现找不到扩展的错误)

当然你也可以使用 绝对路径(推荐) 如:
未开启线程安全:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/"

开启线程安全:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20160303/"

增加并开启pdo_mysql扩展

extension=pdo_mysql.so

修改php配置文件之修改服务器所在时区
> 修改 php.ini 配置文件, 设置php所安装服务器时区

[root@localhost php-src-php-7.1.6]#  vim /usr/local/php/etc/php.ini

找到 timezone 修改时区如下:

date.timezone = PRC

PRC就是英文People’s Republic of China, 这个你应该知道的吧! 中华人民共和国

保存并退出

:wq!

添加 php-fpm 管理相关的配置文件到系统配置目录 /etc/init.d
> 将php源码编译目录下的 sapi/fpm/init.d.php-fpm 文件拷贝到系统配置 /etc/init.d 目录下并重命名为 php-fpm

[root@localhost php-src-php-7.1.6]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

添加 php-fpm 配置文件
> 将php安装目录下的 /usr/local/php/etc/php-fpm.conf.default 文件拷贝同目录下并重命名为 php-fpm.conf

[root@localhost php-src-php-7.1.6]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

添加 www.conf 配置文件
> 将php安装目录下的 /usr/local/php/etc/php-fpm.d/www.conf.default 文件拷贝同目录下并重命名为 www.conf

[root@localhost php-src-php-7.1.6]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

添加php安装目录到系统环境变量
> 创建并打开文件php.sh

[root@localhost php-src-php-7.1.6]# vim /etc/profile.d/php.sh

添加内容如下:

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

保存并退出

:wq!

使用source立即生效刚刚添加的php环境变量

[root@localhost php-src-php-7.1.6]# source /etc/profile.d/php.sh

设置PHP日志目录和php-fpm运行进程的ID文件目录
php-fpm运行进程的ID文件也就是 php-fpm.pid
其中设置php-fpm进程目录的用户和用户组为nginx,
有于我在安装nginx时已经创建, 在这里我就不创建了, 只是列举

添加系统用户组nginx (如果你没有创建过系统用户组nginx请创建)

[root@localhost php-src-php-7.1.6]# groupadd -r nginx

创建新的系统用户nginx, 并添加到系统用户组nginx, 设置不允许此用户名登录shell (如果你没有创建过系统用户nginx请创建)

[root@localhost php-src-php-7.1.6]# useradd -r -g nginx -s /sbin/nologin -d /usr/local/nginx -M nginx

说明一下上面创建系统用户nginx所使用的选项什么意思
-r: 添加系统用户( 这里指将要被创建的系统用户nginx )
-g: 指定要创建的用户所属组( 这里指添加到新系统用户nginx到nginx系统用户组 )
-s: 新帐户的登录shell( /sbin/nologin 这里设置为将要被创建系统用户nginx不能用来登录系统 )
-d: 新帐户的主目录( 这里指定将要被创建的系统用户nginx的家目录为 /usr/local/nginx )
-M: 不要创建用户的主目录( 也就是说将要被创建的系统用户nginx不会在 /home 目录下创建 nginx 家目录 )

创建 php-fpm 日志目录

[root@localhost php-src-php-7.1.6]# mkdir -p /var/log/php-fpm/

创建 php-fpm 进程的ID(php-fpm.pid)文件运行目录

[root@localhost php-src-php-7.1.6]#  mkdir -p /var/run/php-fpm

修改 php-fpm 进程的ID(php-fpm.pid)文件运行目录的所属用户和组

[root@localhost php-src-php-7.1.6]# chown -R nginx:nginx /var/run/php-fpm/

修改session的目录配置
> 创建 session 存放目录

[root@localhost php-src-php-7.1.6]#  mkdir -p /var/lib/php/session

修改 session 存放目录的所属用户和组

[root@localhost php-src-php-7.1.6]# chown -R nginx:nginx /var/lib/php

再次修改 php.ini 文件

[root@localhost php-src-php-7.1.6]# vim /usr/local/php/etc/php.ini

找到 session.save_path 修改为如下内容:

session.save_path = "/var/lib/php/session"

保存并退出

:wq!

设置php开机启动
修改系统配置目录下的 php-fpm 文件可执行权限

[root@localhost php-src-php-7.1.6]# chmod +x /etc/init.d/php-fpm

将系统配置目录下的 php-fpm 添加到 系统服务

[root@localhost php-src-php-7.1.6]# chkconfig --add php-fpm

设置 php-fpm 系统服务 为开机启动

[root@localhost php-src-php-7.1.6]# chkconfig php-fpm on

检测 php-fpm 系统服务是否启动成功
用 chkconfig 命令检测一下服务是否运行成功

[root@localhost php-src-php-7.1.6]# chkconfig --list | grep php-fpm
Note: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd configuration.If you want to list systemd services use 'systemctl list-unit-files'.To see services enabled on particular target use'systemctl list-dependencies [target]'.php-fpm   0:off    1:off    2:on    3:on    4:on    5:on    6:off

可见服务已经在 第2 到 第5 运行等级打开

同样你也可以禁用 php-fpm 开机启动

[root@localhost php-src-php-7.1.6]# chkconfig php-fpm off

用 chkconfig 命令检测一下服务是否运行成功

[root@localhost php-src-php-7.1.6]# chkconfig --list | grep php-fpm
Note: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd configuration.If you want to list systemd services use 'systemctl list-unit-files'.To see services enabled on particular target use'systemctl list-dependencies [target]'.php-fpm    0:off    1:off    2:off    3:off    4:off    5:off    6:off

可见服务已经在 第2 到 第5 运行等级已经关闭
测试PHP的配置文件是否无误

[root@localhost php-src-php-7.1.6]# php-fpm -t
[18-Jun-2017 13:02:33] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful

出现上面的提示也就是测试配置文件通过没有问题, 可以正式使用php服务了
启动php系统服务
使用 systemctl start + 服务名 启动系统服务

[root@localhost php-src-php-7.1.6]# systemctl start php-fpm.service

查看php系统服务状态
使用 systemctl status + 服务名 查看系统服务状态

[root@localhost php-src-php-7.1.6]# systemctl status php-fpm.service
● php-fpm.service - LSB: starts php-fpmLoaded: loaded (/etc/rc.d/init.d/php-fpm; bad; vendor preset: disabled)Active: active (running) since Sun 2017-06-18 13:05:26 EDT; 2min 46s agoDocs: man:systemd-sysv-generator(8)Process: 105210 ExecStart=/etc/rc.d/init.d/php-fpm start (code=exited, status=0/SUCCESS)Memory: 11.0MCGroup: /system.slice/php-fpm.service├─105212 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)├─105213 php-fpm: pool www├─105214 php-fpm: pool www└─105215 php-fpm: pool wwwJun 18 13:05:19 localhost.localdomain systemd[1]: Starting LSB: starts php-fpm...Jun 18 13:05:24 localhost.localdomain php-fpm[105210]: Starting php-fpm  doneJun 18 13:05:26 localhost.localdomain systemd[1]: Started LSB: starts php-fpm.

你可以看到一个绿色的 active (running) 说明系统服务 php-fpm 已经在工作服务了,
有没有觉得自从RedHat系统到7以后, 越来越舒心了(哈哈)
CLI查看php版本信息

[root@localhost php-src-php-7.1.6]# php -v
PHP 7.1.6 (cli) (built: Jun 18 2017 05:55:31) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

修改nginx配置文件使之使用nginx反向php解释器
> 说明一下我在安装的nginx是将配置文件放在 /etc/nginx/ 目录下
> 修改配置文件如下:

server {listen       80;server_name  www.nginx.dev;#charset koi8-r;access_log  logs/nginx.dev.access.log  main;location / {root   /data/www/html;index  index.php index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.htmlerror_page   500 502 503 504  /50x.html;location = /50x.html {root   /data/www/html;}location ~ ^/(images|javascript|js|css|flash|media|static)/ {expires 30d;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000#location ~ \.php$ {#    root           html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /data/www/html/$fastcgi_script_name;include        fastcgi_params;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one#location ~ /\.ht {deny  all;}
}

创建文件

[root@localhost php-src-php-7.1.6]# touch /data/www/html/index.php

编辑文件

[root@localhost php-src-php-7.1.6]# vim  /data/www/html/index.php

输入内容

<?php
phpinfo();

保存退出

:wq!

重新加载nginx配置

[root@localhost php-src-php-7.1.6]# systemctl reload nginx.service

浏览器访问

至此PHP7.1也就编译安装成功了, 也和nginx建立了关系
至于nginx和php-fpm和是怎么工作的可以参考 Nginx+Php-fpm运行原理详解
希望本文对你的工作和学习有所帮助.

CentOS7.3编译安装php7.1相关推荐

  1. php-7.2.13的安装,Centos7.2编译安装php-7.0.13

    Centos7.2编译安装php-7.0.13 1- 安装依赖 yum install wget autoconf libjpeg libjpeg-devel libpng libpng-devel ...

  2. centos7 编译php5.3,centos7下编译安装php7.3

    一.下载php7.3的源码 https://www.php.net/downloads.php 下载php-7.3.4.tar.gz 二.安装gcc,gcc-c++,kernel-devel yum ...

  3. centos7.2编译php,CentOS7.2编译安装PHP7.2.3之史上最详细步骤。

    首先,我们的CentOS版本信息如下: 开始我们的编译. 第一步: 将php安装包安装到/usr/src目录下. cd /usr/src && wget http://cn2.php. ...

  4. linux centos7.x 编译安装php7.4.2

    php 官网下载源码 https://www.php.net/downloads 7.4.20地址 https://www.php.net/distributions/php-7.4.20.tar.g ...

  5. linux php7.2编译安装,Linux下编译安装php7.2

    准备工作 所有操作需要在root用户下 安装路径: /usr/local/php 安装PHP 首先要安装如下依赖包 $ yum install -y gcc gcc-c++  make zlib zl ...

  6. centos7安装详细图解_CentOS7编译安装PHP7的详细教程(图文)

    本篇文章给大家带来的内容是关于CentOS7编译安装PHP7的详细教程(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 使用编译的方式来安装 PHP 7. 安装编译工具.依赖包 ...

  7. centos php71,CentOS 71编译安装PHP7

    1 创建php用户和用户组,并在github下载php7源码 首先创建一个名为php且没有登录权限的用户和一个名为php的用户组,然后去GitHub下载php7源码包. #######新建php用户和 ...

  8. php 7.0 编译安装mysql_源码编译安装php7.0.5

    源码编译安装php7.0.5 源码包下载地址 安装epel扩展yum源 [root@xuegod63 ~]# yum clean all [root@xuegod63 ~]# yum list 注:R ...

  9. 【安装PHP】如何在openSUSE42.1下编译安装PHP7

    首先推荐一篇文章PHP 7 Release Date Arrived: Will Developers Adopt PHP 7? - PHP Classes blog. 里面说到是否会去使用PHP7, ...

最新文章

  1. UNIX--stat、fstat和lstat函数
  2. python按键盘上哪个键运行_python通过按下键盘特定按键,开始运行python文件
  3. PL/SQL Developer如何修改表数据
  4. 访问IIS时,名称以无效字符开头。。。解决方案
  5. 查看Python当前版本
  6. apache mesos_在Twitter上使用Apache Mesos和Apache Aurora进行资源调度和任务启动
  7. 华大单片机m4内核的滴答定时器_微处理器、单片机及其外设,处理还是控制?...
  8. 根据年月日计算是星期几的函数,基姆拉尔森计算公式
  9. CSS3蒙版/遮罩、倒影
  10. java class和this_转:java 类名 this 的使用
  11. Mysql学习总结(49)——从开发规范、选型、拆分到减压
  12. java map原理_Java中的HashMap的工作原理是什么?
  13. [转]如何用SQL命令修改字段名称
  14. Matlab数字图像处理学习记录【5】——彩色图像处理
  15. 3.21世纪计算机技术展望
  16. 【公众号】微信进入公众号链接自动获取授权登陆
  17. OpenCv抽取视频帧和时间戳[综合代码后续添加]
  18. 高通msm8996启动流程
  19. 蓝牙耳机的LDAC、aptX指的都是什么?
  20. 如何用c语言编写发邮件程序,想学C语言发邮件程序?5分钟教会你:附送源码+教学!...

热门文章

  1. 46 CO配置-控制-利润中心会计-创建虚拟利润中心
  2. python 自动化办公 uibot_【插件开发】使用 Python 扩展 UiBot 的功能
  3. java logger使用_这才是JAVA中打印日志的正确姿势
  4. .net core不能使用httpget_.NET Core 中正确使用 HttpClient 的姿势
  5. 图表示学习(Graph Representation Learning)笔记
  6. 【转】c++优先队列(priority_queue)用法详解
  7. visdom可视化工具
  8. transform.SimilarityTransform()==>图像的相似变换=等距变换(平移+旋转变换)+均匀尺度缩放
  9. 原生js实现类似jq的trigger
  10. (自定义组件)通用- X轴横向:溢出滚动 (含代码)- 案例篇