PHP编译安装

一、fastcgi介绍

1、简介

CGI 通用网关接口,用于HTTP服务和其他应用的程序通信交流工具,CGI程序必须运行在网络服务器上,性能差,就产生了FastCGI。
FastCGI原理和CGI一样不过区别是把动态语言和HTTP服务器分离出来
C/S架构:客户端服务端
B/S : 浏览器服务器
特点:
 FastCGI是HTTP服务器和动态脚本语言间通信的接口或者工具
 FastCGI优点是把动态语言解析和HTTP服务器分离开来
 Nginx、Apache、lighttpd以及多数动态语言都支持FastCGI
 FastCGI接口方法采用C/S结构,分为客户端(HTTP服务器)和服务器(动态语言解析服务器)
 PHP动态语言服务端可以启动多个FastCGI的守护进程
 http服务器通过(Nginx fastcgi_pass)FastCGI客户端和动态语言FastCGI服务端通信(如:php-fpm)

 Nginx 不支持对外部动态程序的直接调用或者解析 ,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在linux下是socket,(这个socket可以是文件socket,也可以是IP  socket)。为了调用CGI程序,还需要wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,warpper接収到请求,然后派出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据,接着,wrapper再将返回的数据通过FastCGI接口,沿着固定socket传递给Nginx;最后,nginx将返回的数据发送给客户端,这就是Nginx+fastcgi的整个运行过程。

2、nginx fastcgi访问php流程:

1、用户发送http请求报文给nginx服务器

2、nginx会根据文件url和后缀来判断请求

3、如果请求的是静态内容,nginx会将结果直接返回给用户

4、如果请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将这个请求发送给php-fpm

5、php-fpm会将请求交给wrapper

6、wrapper收到请求会生成新的线程调用php动态程序解析服务器

7、如果用户请求的是博文、或者内容、PHP会请求MySQL查询结果

8、如果用户请求的是图片、附件、PHP会请求nfs存储查询结果

9、php会将查询到的结果交给Nginx

10、nginx会生成一个响应报文返还给用户

3、FastCGI的重要特点总结:
1)是HTTP服务器和动态脚本语言间通信的接口或者工具!
2)优点就是把动态语言解析和HTTP服务器分离了开来!
3)Nginx、Apache、lighttpd以及多数动态语言都支持FastCGI。
4)接口方式采用C/S结构,分为HTTP服务器(客户端)和动态语言解析服务器(服务端)
5)PHP动态语言服务端可以启动多个FastCGI的守护进程例如:php-fpm(fcgi process mangemnt))
6)http服务器通过例(Nginx fastgi_pass)FastCGI客户端和动态语言FastCGI服务端通信(例如:php-fpm)

二、编译安装

 1、安装依赖包

yum –y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libmcrypt-devel mhash mcrypt

2、安装字符集转换库(默认可以不进行安装)

mkdir -p /server/tools/
cd /server/tools/
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make
make install 

说明:此软件在centos6.8之后,系统已经自带此软件功能,可以不进行安装
#-> 编译好的软件如何卸载,删除安装后的程序目录

3、php编译安装

cd /server/tools
#wget http://cn2.php.net/get/php-5.5.32.tar.gz
tar xf php-5.5.32.tar.gz
cd php-5.5.32
./configure \
--prefix=/application/php-5.5.32 \
--with-mysql=/application/mysql \         ---mysqlnd:表示数据库服务没有安装在本地服务器上参数
--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 \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--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

#编译安装
touch ext/phar/phar.phar 
make && make install

4、创建软连接

ln -s /application/php-5.5.32/ /application/php

5、设置php配置文件

cd /server/tools/php-5.5.32       
ll php.ini*
-rw-r--r--. 1 1001 1001 69236 2016-02-02 21:33 php.ini-development
-rw-r--r--. 1 1001 1001 69266 2016-02-02 21:33 php.ini-production
#(php.ini-developments是开发人员调试用配置文件,php.ini-production是生产常见所有配置文件)
cp php.ini-production /application/php/lib/php.ini
#php.ini-production 与 php.ini-development 文件区别关系对比
#生产文件:不会输出过多的日志信息
#开发文件:会输出大量程序测试日志信息
cd /application/php/etc/
cp php-fpm.conf.default php-fpm.conf

6、启动服务

/application/php/sbin/php-fpm

#检查服务是否启动
 ps -ef|grep php
 netstat -lntup|grep php

#服务重启
killall php-fpm  && /application/php/sbin/php-fpm

7、nginx加载使用

location ~* .*\.(php|php5)?$ {    
                root html/blog;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi.conf;
    }

拓展:测试数据库连通代码

<?php
//$link_id=mysql_connect('主机名','用户','密码');
//mysql -u用户 -p密码 -h 主机
$link_id=mysql_connect('localhost','root','oldboy123') or mysql_error();
if($link_id){
             echo "mysql successful by root !\n";
            }else{
             echo mysql_error();
            }
?>

 

posted @ 2017-11-22 16:35  沉心十年  阅读(372)  评论(0编辑  收藏  举报