CentOS 7.5 編譯安裝 PHP 7.2.10
阿新 • • 發佈:2018-12-06
文章目錄
本文主要記錄如何在
CentOS 7.5
中編譯安裝PHP
官方最新的7.2.10
版本。由於像Nginx
、MariaDB
和PHP
的的原始碼都是用C/C++
寫的,所以自己的CentOS 7.5
伺服器上必須要安裝gcc
和g++
軟體。搭建
LNMP
環境一般是先安裝Mysql
/MariaDB
, 再安裝Nginx
, 其次是安裝PHP
安裝環境
- 系統:
CentOS 7.5.1804
- 軟體:
PHP 7.2.10
- 依賴軟體:
re2c
、libmcrypt
、mhash
、mcrypt
建立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