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(); } ?>