1. 程式人生 > >CentOS 7.5 編譯安裝 PHP 7.2.10

CentOS 7.5 編譯安裝 PHP 7.2.10

文章目錄

本文主要記錄如何在CentOS 7.5中編譯安裝PHP官方最新的7.2.10版本。由於像NginxMariaDBPHP的的原始碼都是用C/C++寫的,所以自己的CentOS 7.5伺服器上必須要安裝gccg++軟體。

搭建LNMP環境一般是先安裝Mysql/MariaDB, 再安裝Nginx, 其次是安裝PHP

安裝環境

  • 系統:CentOS 7.5.1804
  • 軟體:PHP 7.2.10
  • 依賴軟體:re2clibmcryptmhashmcrypt

建立PHP安裝目錄、建立使用者和目錄

先先建立一個名為php沒有登入許可權的使用者和一個名為php的使用者組,然後安裝php所需的依賴庫和依賴包,最後通過.configure進行安裝的詳細配置。

  • 建立php使用者組
> 建立`php`使用者組(`-r`選項是建立一個系統使用者組的意思)
[[email protected] ~]$ groupadd -r php
  • 建立使用者並加入到php系統使用者組
> 新增新使用者

> -r: 新增系統使用者( 這裡指將要被建立的系統使用者`php`)

> -g: 指定要建立的使用者所屬組( 這裡指新增到新系統使用者`php`到`php`系統使用者組 )

> -s: 新帳戶的登入`shell`( `/sbin/nologin` 這裡設定為將要被建立系統使用者`php`不能用來登入系統 )

> -d: 新帳戶的主目錄( 這裡指定將要被建立的系統使用者`php`的家目錄為 `/usr/local/php` )

> -M: 不要建立使用者的主目錄( 也就是說將要被建立的系統使用者`php`不會在 `/home` 目錄下建立 `php` 家目錄 )

[
[email protected]
~]$ useradd -r -g php -s /sbin/nologin -d /usr/local/php -M php

安裝依賴庫

> `yum`安裝`PHP`必須的依賴庫

[[email protected] ~]$  yum -y install gcc gcc-c++ wget make libxml2  libxml2-devel  libmcrypt-devel libjpeg-devel  libpng-devel  openssl  openssl-devel  curl-devel  freetype-devel bison autoconf  

建立家目錄存放軟體包目錄

> 建立家目錄存放軟體包目錄

[[email protected] ~]$ mkdir soft && cd soft

下載解壓原始碼包

> `php.net`下載`php7`安裝包

[[email protected] soft]$ wget -c 
http://am1.php.net/distributions/php-7.2.10.tar.gz

> 解壓

[[email protected] soft]$ tar -zxvf php-7.2.10.tar.gz

下載並安裝php依賴

  • PHP語法分析器re2c
> 下載

[[email protected] soft]$ wget -c https://github.com/skvadrik/re2c/releases/download/1.0.3/re2c-1.0.3.tar.gz

> 解壓

[[email protected] soft]$ tar -zxvf re2c-1.0.3.tar.gz

> 進入解壓後的原始碼目錄編譯並安裝

$ cd re2c-1.0.3/

$ ./configure

$ make && make install

$ cd ~/soft/
  • 加密支援擴充套件庫libmcrypt

使用php mcrypt 前必須先安裝Libmcrypt

> 下載

[[email protected] soft]$ wget -c https://jaist.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz

> 解壓

$ tar -zxvf libmcrypt-2.5.8.tar.gz

> 進入解壓後的原始碼目錄編譯並安裝

# cd libmcrypt-2.5.8/

# ./configure

# make && make install
  • 加密方式擴充套件庫mhash
> 下載

[[email protected] soft]$ wget -c https://jaist.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz

> 解壓

$ tar -zxvf mhash-0.9.9.9.tar.gz

> 進入解壓後的原始碼目錄編譯並安裝

# cd mhash-0.9.9.9/

# ./configure

# make && make install
  • 加密方式擴充套件庫mcrypt
> 下載

[[email protected] soft]$ wget -c https://jaist.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

> 解壓

$ tar -zxvf mcrypt-2.6.8.tar.gz

> 進入解壓後的原始碼目錄編譯並安裝

# cd mcrypt-2.6.8/

# ./configure

# make && make install

# cd ~
  • 編譯mcrypt時,報錯:configure: error: "You need at least libmhash 0.8.15 to compile this program. http://mhash.sf.net/"
[[email protected] ~]$ ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a

[[email protected] ~]$ ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la

[[email protected] ~]$ ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so

[[email protected] ~]$ ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

[[email protected] ~]$ ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

> 開啟`/etc/ld.so.conf`,在檔案之後,新增一行:

[[email protected] ~]$ vi /etc/ld.so.conf

/usr/local/lib

> 然後,執行`ldconfig`,重新編譯即可。

[[email protected] ~]$ ldconfig

編譯php 7.2.10

  • 檢視原始碼目錄檔案具體內容
> 進入解壓後的原始碼目錄編譯並安裝

[[email protected] ~]$ cd soft/php-7.2.10/

> 檢視原始碼目錄檔案具體內容

$ ll

可以發現目錄中並沒有configure檔案, 但是有一個名為buildconf的檔案,通過執行這個檔案生成configure檔案

> 執行 `buildconf` 檔案, 生成 `configure` 檔案,加入 `--force` 選項

$ ./buildconf --force

> 生成原始碼目錄配置檔案`configure`之後的目錄

$ ll

> 現在原始碼目錄也就存在`configure`檔案
  • 編譯
> 如果使用此編譯選項列表, 請將 \ 反斜線後面的註釋去除, 並且後面不能有空白字元

$ ./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=/var/run/mysql/mysql.sock \
--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-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
  • 註釋版
$ ./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
  • 編譯安裝
> 編譯安裝

$ make && make install

> 編譯安裝後的php目錄

$ ll /usr/local/php

配置php

  • 修改php配置檔案之新增php配置檔案
> 將php原始碼編譯目錄下的`php.ini-production`拷貝到php安裝目錄下的`etc`目錄下

$ cp php.ini-production /usr/local/php/etc/php.ini
  • 修改php配置檔案之修改php擴充套件目錄所在位置
$ vim /usr/local/php/etc/php.ini

> 使用 `絕對路徑`

[[email protected] soft]$ extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/" 
  • 修改php配置檔案之修改伺服器所在時區
> 找到 `timezone` 修改時區

date.timezone = PRC

> PRC就是英文People's Republic of China,中華人民共和國
  • 修改php配置檔案之開啟OPcache

> 跳轉到檔案的最後一行(shift+G), 輸入以下內容:

zend_extension=opcache.so;

  • 修改php配置檔案之開啟mysqli擴充套件
> 找到 `extension` 位置, 輸入以下內容

extension=mysqli.so
extension=pdo_mysql.so

> 儲存並退出

:wq!
  • 新增php-fpm管理相關的配置檔案到系統配置目錄/etc/init.d
> 將php原始碼編譯目錄下的 `sapi/fpm/init.d.php-fpm` 檔案拷貝到系統配置 `/etc/init.d` 目錄下並重命名為 `php-fpm`

$ cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

$ cd
  • 新增php-fpm配置檔案
> 將php安裝目錄下的 `/usr/local/php/etc/php-fpm.conf.default` 檔案拷貝同目錄下並重命名為 `php-fpm.conf`

$ 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`

[[email protected] ~]$ cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
  • 新增php安裝目錄到系統環境變數
> 建立並開啟檔案php.sh

[[email protected] ~]$ vim /etc/profile.d/php.sh

> 新增內容如下:

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

> 儲存並退出

:wq!

> 使用source立即生效剛剛新增的php環境變數

[[email protected] ~]$ source /etc/profile.d/php.sh
  • 設定PHP日誌目錄和php-fpm執行程序的ID檔案目錄

php-fpm執行程序的ID檔案也就是php-fpm.sock

其中設定php-fpm程序目錄的使用者和使用者組為nginx,

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

> 建立 `php-fpm` 日誌目錄

[[email protected] ~]$ mkdir -p /var/log/php-fpm/

> 建立 `php-fpm` 程序的ID(php-fpm.sock)檔案執行目錄

[[email protected] ~]$  mkdir -p /var/run/php-fpm

> 修改 `php-fpm` 程序的ID(php-fpm.sock)檔案執行目錄的所屬使用者和組

[[email protected] ~]$ chown -R nginx:nginx /var/run/php-fpm/
  • 修改session的目錄配置
> 建立 `session` 存放目錄

[[email protected] ~]$ mkdir -p /var/lib/php/session

> 修改 `session` 存放目錄的所屬使用者和組

[[email protected] ~]$ chown -R nginx:nginx /var/lib/php

> 再次修改 `php.ini` 檔案

[[email protected] ~]$ vim /usr/local/php/etc/php.ini

> 找到 `session.save_path` 修改為如下內容:

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

> 儲存並退出

:wq!
  • 設定php開機啟動
> 修改系統配置目錄下的 `php-fpm` 檔案可執行許可權

[[email protected] ~]$ chmod +x /etc/init.d/php-fpm

> 將系統配置目錄下的 `php-fpm` 新增到 `系統服務`

[[email protected] ~]$ chkconfig --add php-fpm

> 設定 `php-fpm` `系統服務` 為開機啟動

[[email protected] ~]$ chkconfig php-fpm on
  • 檢測php-fpm系統服務是否啟動成功
>`chkconfig`命令檢測一下服務是否執行成功

[[email protected] ~]$ chkconfig --list | grep php-fpm

php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off

> 可見服務已經在 第2 到 第5 執行等級開啟

> 同樣你也可以禁用 `php-fpm` 開機啟動

[[email protected] ~]$ chkconfig php-fpm off

>`chkconfig`命令檢測一下服務是否執行成功

[[email protected] ~]$ chkconfig --list | grep php-fpm

php-fpm         0:off   1:off   2:off   3:off   4:off   5:off   6:off

> 可見服務已經在 第2 到 第5 執行等級已經關閉
  • 測試PHP的配置檔案是否無誤
[[email protected] ~]$ php-fpm -t
  • 啟動php系統服務
> 使用 `systemctl start` + `服務名` 啟動系統服務

[[email protected] ~]$ systemctl start php-fpm.service
  • 檢視php系統服務狀態
> 使用 `systemctl status` + `服務名` 檢視系統服務狀態

[[email protected] ~]$ systemctl status php-fpm.service
  • 檢視php版本資訊
[[email protected] ~]$ php -v
  • 修改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;
    }
}

> 建立檔案

[[email protected] ~]$ touch /data/www/html/index.php

> 編輯檔案

[[email protected] ~]$ vim /data/www/html/index.php

> 輸入內容

<?php

phpinfo();

> 儲存退出

:wq!

> 重新載入nginx配置

[[email protected] ~]$ systemctl reload nginx.service