CentOS7.3编译安装php7.1

说明

安装LNMP环境一般是先安装mysql/mariadb,再安装nginx,其次是安装php

安装依赖包

[root@localhost ~]# yum -y install gcc
    [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

加密支持扩展库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

可能会出现要求开启 --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]: Y

    Please enter your email address.
    (Your address will be mangled so that it will not go out on any
    mailinglist in plain text): warnerwu@126.com

    Posting to http://qa.php.net/buildtest-process.php

    Thank you for helping to make PHP better.

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

编译安装后的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 = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/"

修改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,这个你应该知道的吧! 中华人民共和国

添加 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.sock

其中设置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.sock)文件运行目录

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

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

    [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 native
          systemd services. SysV configuration data might be overridden by native
          systemd 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 native
          systemd services. SysV configuration data might be overridden by native
          systemd 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-fpm
       Loaded: 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 ago
         Docs: man:systemd-sysv-generator(8)
      Process: 105210 ExecStart=/etc/rc.d/init.d/php-fpm start (code=exited,status=0/SUCCESS)
       Memory: 11.0M
       CGroup: /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 www

    Jun 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  done
    Jun 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配置文件使之使用nginx反向php解释器,也就是php-fpm它其实就是cgi

> 说明一下我在安装的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.html
        #
        error_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运行原理详解

希望本文对你的工作和学习有所帮助

如果觉得还不错怎么感谢我呢? 妈呀! 点赞啊!

Good Luck! from warnerwu at 2017.06.24 PM

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


#使用军哥的lnmp配置虚拟主机,需要注意的是要配置hosts文件(这一点官方没有讲到)具体方法:1、修改hosts文件sudo vim /etc/hosts2、在hosts文件中新增一行(这里类似于windows上配置hosts文件)127.0.0.1 www.baidu.com3、保存并重启网络
一、配置编译环境 yum update &amp;&amp; yum upgrade yum groupinstall &quot;Development Tools&quot; yum install gcc gcc-c++ pcre* openssl* gd-devel* zlib-devel
一、下载repo文件 二、备份并替换系统的repo文件 三、执行yum源更新操作
LAMP -- Linux Apache MySQL PHP 在CentOS安装的顺序,我一般是Apache&#160;-&gt;&#160;MySQL&#160;-&gt;&#160;PHP 第一步、安装并配置Apache 1、使用yum安装 [plain]&#160;view plaincopy
一、下载nginx安装包,官网下载中心http://nginx.org/download [root@localhost software]# wget http://nginx.org/download/nginx-1.10.1.tar.gz 二、解压nginx安装包 [root@localhos
1.下载composer curl -sS https://getcomposer.org/installer | php ps:如果出现php无法运行的情况,请先把PHP加入环境变量,具体操作参考《centOS安装PHP》 2.移动或复制composer到环境下可执行 cp composer.ph
一、卸载旧版本的vim 二、安装终端字符处理库ncurses 三、下载Vim8 四、编译安装 五、添加到系统环境变量 六、安装成功
引言 我们在日常的开发过程中,很多时候需要连接服务器查看日志或者在服务器上调试代码。但是,使用 ssh 命令登录服务器每次都需要输出密码,就比较繁琐。因此我们可以使用 sshpass 通过参数指定密码进行登录。解决了这个问题之后,我发现登录服务器之后,还需要手动 cd 切换到项目目录或者日志目录。为
iptables basics Introduction iptables 是一个配置 Linux 防火墙的工具,是 netfilter 项目的一部分。 在 Linux Kernel 3.13 及以上版本中, nftables 将作为后继者取代 iptables 以成为更强大易用的防火墙工具 Bas
一、下载tengine 二、安装tenginx(nginx)的模块依赖库 三、解压并指定安装路径 四、编译安装 五、启动(tengine)nginx 六、访问(tengine)nginx
这篇文章介绍了如何快速部署一套Kubernetes集群,下面就快速开始吧! 准备工作 机器部署规划 主机 | IP | 部署组件 | | master主节点 | 192.168.199.206 | etcd、kube apiserver、kube controller manager、kube sc
一、pip下载 二、解压安装 三、安装完成
1、WebBench安装: yum install ctags(先安装依赖库) mkdir /usr/local/man (创建一个目录不然会报错) wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz tar zxv
1:查看环境: [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 [root@10-4-14-168 html]# chkconfig iptables off 3:配置CentOS
安装 1.检查当前是否有安装php rpm&#160;-qa|grep&#160;php 如果有安装PHP,那么请先删除这些安装包: yum&#160;remove&#160;php* 2.安装php源 Centos 5 安装php源: rpm&#160;-ivh&#160;http://mirro
一、安装 二、配置 三、修改配置文件 四、program 配置 五、启动
Sed 日常使用介绍 简介 是 环境下常用的流处理工具, 可以处理字符流, 文件或者二进制文件流。 各个 发行版都会配备 及其衍生的命令工具, 因此, 掌握该工具的基本用法, 足以满足我们日常的许多文本处理的任务。 以下采用示例的方式对 进行基本用法介绍. 如果有兴趣了解更高级的使用技巧, 本文采用
linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d