首頁  >  文章  >  後端開發  >  LNMP原始碼編譯安裝php-5.5.32實例

LNMP原始碼編譯安裝php-5.5.32實例

小云云
小云云原創
2018-03-22 11:11:002167瀏覽

本文主要跟大家分享LNMP原始碼編譯安裝php-5.5.32實例,希望能幫助大家。

1 什麼是CGI

  • CGI的全稱為「通用閘道介面」(Common Gateway Interface),為HTTP
    伺服器與其他機器上的程式服務通訊交流的一種工具,CGI 程式必須運行在網路伺服器上。

  • 傳統CGI介面方式的主要缺點是效能較差,因為每次HTTP伺服器遇到動態程式時都需要透過重新啟動解析器來執行解析,之後結果才會被傳回給HTTP伺服器。這在處理高並發存取時幾乎是不可用的,因此就誕生了FastCGI。另外,傳統的CGI介面方式安全性也很差,故而現在已經很少被使用了。

2 什麼是FastCGI

  • #FastCGI是一個可伸縮地、高速地在HTTP伺服器和動態腳本語言間通訊的介面(在Linux下,FastCGI 介面即為socket,這個socket可以是檔案socket,也可以是IP socket),主要優點是把動態語言和HTTP伺服器分開。多數流行的HTTP伺服器都支援FastCGI。包括Apache、Nginx和Lighttpd等。

  • 同時,FastCGI也被許多腳本語言所支持,比較流行的腳本語言之一為PHP。 FastCGI介面採用的是C/S(Client/Server)架構,它可以將HTTP伺服器和腳本解析伺服器分開,同時還能在腳本解析伺服器上啟動一個或多個腳本來解析守護程式。當HTTP伺服器遇到動態程式時,可以直接交付給FastCGI進程來執行,然後將得到的結果傳回瀏覽器。這種方式可以讓HTTP伺服器專一地處理靜態請求,或將動態腳本伺服器的結果傳回給客戶端,這在很大程度上提高了整個應用系統的效能。

3 Nginx FastCGI的運作原理

Nginx不支援對外部動態程式的直接呼叫或解析,所有的外部程式(包括PHP)必須透過FastCGI介面來調用。 FastCGI介面在Linux下是socket,為了呼叫CGI程序,還需要一個FastCGI的wrapper(可以理解為用於啟動另一個程式的程式),這個wrapper綁定在某個固定的socket上,如埠或檔案socket 。當Nginx將CGI請求發送給這個socket的時候,透過FastCGI接口,wrapper接收到請求,然後派生出一個新的線程,這個線程調用解釋器或外部程式處理腳本來讀取返回的資料;接著,wrapper再將返回的資料通過FastCGI接口,沿著固定的socket傳遞給Nginx;最後,Nginx將返回的資料傳送給客戶端,這就是Nginx+FastCGI的整個運作過程。詳細的過程如下圖。

LNMP原始碼編譯安裝php-5.5.32實例

4 LNMP之php(Fastcgi)服務安裝準備

4.1 檢查Nginx及MySQL的安裝狀況

[root@web01 ~]# netstat -lntup |egrep "nginx|mysql"tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1568/mysqld         
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1694/nginx          
[root@web01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final)
[root@web01 ~]# uname -r2.6.32-696.el6.x86_64
[root@web01 ~]# uname -mx86_64

4.2 檢查安裝PHP所需的lib函式庫

# PHP程式會在開發及執行時會呼叫一些諸如zlib、gd等函式函式庫,因此需要確認LIB函式庫是否已經安裝,執行指令如下:

rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

提示:libjpeg-turbo-devel是早期的libjpeg-devel的新名字,libcurl-devel是早期的curl-devel的新名字。
每個lib一般都會存在對應的以「-devel」命名的套件,安裝對應的「-devel」套件後,對應的lib套件會自動安裝好,例如安裝gd-devel就會安裝gd。

# 这些lib库也不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行有问题,例如验证码无法显示等。[root@web01 ~]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel[root@web01 ~]# [root@web01 ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-develzlib-devel-1.2.3-29.el6.x86_64# 一般都没有安装,需要yum安装下yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
yum -y install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel# 再次检查,发现没有libiconv-devel这个包,需要手动安装下[root@web01 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-develzlib-devel-1.2.3-29.el6.x86_64
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
libxml2-devel-2.7.6-21.el6_8.1.x86_64
[root@web01 tools]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-develfreetype-devel-2.3.11-17.el6.x86_64
libpng-devel-1.2.49-2.el6_7.x86_64
libcurl-devel-7.19.7-53.el6_9.x86_64
libxslt-devel-1.1.26-2.el6_3.1.x86_64
gd-devel-2.0.35-11.el6.x86_64
[root@web01 ~]# cd /home/oldboy/tools/ [root@web01 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz[root@web01 tools]# tar -zxf libiconv-1.14.tar.gz [root@web01 tools]# cd libiconv-1.14[root@web01 libiconv-1.14]# ./configure --prefix=/usr/local/libiconv[root@web01 libiconv-1.14]# make && make install# 安装php的相关扩展库,需要先安装epel源# 安装libmcrypt库,这是一个使用动态加载的模块化的库,这个不是必须的库,在开发的时候需要用到[root@web01 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo[root@web01 tools]# yum install -y libmcrypt-devel# 安装mhash加密扩展库[root@web01 tools]# yum install -y mhash# 安装mcrypt加密扩展库[root@web01 tools]# yum install -y mcrypt# 检查[root@web01 tools]# rpm -qa libmcrypt mcrypt mhashmcrypt-2.6.8-10.el6.x86_64
libmcrypt-2.5.8-9.el6.x86_64
mhash-0.9.9.9-3.el6.x86_64

4.3 取得php軟體包編譯安裝

# 获取php-5.5.32
[root@web01 tools]# wget http://mirrors.sohu.com/php/php-5.5.32.tar.gz
# 解压配置php
[root@web01 tools]# tar -xf php-5.5.32.tar.gz 
[root@web01 tools]# cd php-5.5.32
# 编译;注意每一行后边的反斜线(\)后边不能有任何特殊字符包括空格
# --with-fpm-user=www & --with-fpm-group=www 这两个模块的www是在Nginx安装时候创建的用户
./configure \
--prefix=/application/php5.5.32 \--with-mysql=/application/mysql/ \--with-pdo-mysql=mysqlnd \--with-iconv-dir=/usr/local/libiconv \--with-freetype-dir \--with-jpeg-dir \--with-png-dir \--with-zlib \--with-libxml-dir=/usr \--enable-xml \--disable-rpath \--enable-bcmath \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--with-curl \--enable-mbregex \--enable-fpm \--enable-mbstring \--with-mcrypt \--with-gd \--with-openssl \--with-mhash \--enable-gd-native-ttf \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-soap \--enable-short-tags \--enable-static \--with-xsl \--with-fpm-user=www \--with-fpm-group=www \--enable-ftp \--enable-opcache=no[root@web01 php-5.5.32]# echo $?
0
# 在make install之前需要先做以下操作
[root@web01 php-5.5.32]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
[root@web01 php-5.5.32]# touch ext/phar/phar.phar
[root@web01 php-5.5.32]# vim /etc/ld.so.conf
[root@web01 php-5.5.32]# tail -1 /etc/ld.so.conf/application/mysql/lib/[root@web01 php-5.5.32]# ldconfig
# make && make install(make -j可以指定多颗CPU,在CPU颗数多的情况下),时间比较长。
[root@web01 php-5.5.32]# make
......

Build complete.
Don't forget to run 'make test'.    # 这样make完毕(等了许久)

[root@web01 php-5.5.32]# make install
......
ln -s -f phar.phar /application/php5.5.32/bin/phar
Installing PDO headers:          /application/php5.5.32/include/php/ext/pdo/        # make install完毕
[root@web01 php-5.5.32]# ln -s /application/php5.5.32/ /application/php
[root@web01 php-5.5.32]# ls /application/php
bin  etc  include  lib  php  sbin  var
[root@web01 php-5.5.32]# ls php.ini* -l
-rw-r--r-- 1 1001 1001 69236 Feb  2  2016 php.ini-development   #开发环境的配置文件-rw-r--r-- 1 1001 1001 69266 Feb  2  2016 php.ini-production    #生产环境的配置文件[root@web01 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini #php配置文件默认路径
[root@web01 php-5.5.32]# cd /application/php/etc/
[root@web01 etc]# cp php-fpm.conf.default php-fpm.conf
[root@web01 etc]# /application/php/sbin/php-fpm 
[root@web01 etc]# lsof -i :9000
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 15200 root    7u  IPv4 127921      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 15201  www    0u  IPv4 127921      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 15202  www    0u  IPv4 127921      0t0  TCP localhost:cslistener (LISTEN)
[root@web01 etc]# ps -ef |grep php-fpm
root      15200      1  0 21:35 ?        00:00:00 php-fpm: master process (/application/php5.5.32/etc/php-fpm.conf)
www       15201  15200  0 21:35 ?        00:00:00 php-fpm: pool www            
www       15202  15200  0 21:35 ?        00:00:00 php-fpm: pool www            
root      15205   1668  0 21:35 pts/0    00:00:00 grep php-fpm
# 到此为止php安装完毕

以上是LNMP原始碼編譯安裝php-5.5.32實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn