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 文件javascript

生成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=/tmp/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.pid

其中設置php-fpm進程目錄的用戶和用戶組爲nginx, php

有於我在安裝nginx時已經建立, 在這裏我就不建立了, 只是列舉css

> 添加系統用戶組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 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之後, 愈來愈舒心了(哈哈)html

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運行原理詳解java


但願本文對你的工做和學習有所幫助

若是以爲還不錯怎麼感謝我呢? 媽呀! 點贊啊!mysql

Good Luck! from warnerwu at 2017.06.24 PMlinux

相關文章
相關標籤/搜索