PHP运行模式汇总(2)

(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。在正常的CGI模式中,php-cgi.exe在此便退出了。

在CGI模式中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

Fastcgi的优点:

1)从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分 配新的进程来运行逻辑.
2)从安全性上看,Fastcgi支持分布式运算. fastcgi和宿主的server完全独立, fastcgi怎么down也不会把server搞垮.
3)从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理还是留给宿主server, 这样宿主server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态

FastCGI缺点:

说完了好处,也来说说缺点。从我的实际使用来看,用FastCGI模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio调试程序时,由于 FastCGI会认为 PHP进程超时,从而在页面返回 500错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。

安装fastcgi模式:
安装apache路径是/usr/local/httpd/
安装php路径是/usr/local/php/

1)安装mod_fastcgi

wget tar zxvf mod_fastcgi-2.4.6.tar.gz cd mod_fastcgi-2.4.6 cp Makefile.AP2 Makefile vi Makefile,编辑top_dir = /usr/local/httpd make make insta

安装完后,

/usr/local/httpd/modules/多出一个文件:
mod_fcgid.so

2)重新编译php

./configure –prefix=https://www.jb51.net/usr/local/php –enable-fastcgi –enable-force-cgi-redirect –disable-cli make make install

这样编译后,在PHP的bin目录下的php-cgi就是fastcgi模式的php解释器了
安装成功后,执行

php -v 输出 PHP 5.3.2 (cgi-fcgi).

这里输出带了cgi-fcgi

注意:

1. 编译参数不能加 –with-apxs=https://www.jb51.net/usr/local/httpd/bin/apxs 否则安装出来的php执行文件是cli模式的
2  如果编译时不加–disable-cli则输出 PHP 5.3.2(cli)
3)配置apache

需要配置apache来以fastcgi模式运行php程序
vi httpd.conf

我们使用虚拟机的方式实现:

#加载fastcgi模块 LoadModule fastcgi_module modules/mod_fastcgi.so #//以静态方式执行fastcgi 启动了10进程 FastCgiServer /usr/local/php/bin/php-cgi -processes 10 -idle-timeout 150 -pass-header HTTP_AUTHORIZATION <VirtualHost *:80> # DocumentRoot /usr/local/httpd/fcgi-bin ServerName ScriptAlias /fcgi-bin/ /usr/local/php/bin/ #定义目录映射 /fcgi-bin/ 代替 /usr/local/php/bin/ Options +ExecCGI AddHandler fastcgi-script .php .fcgi #.php结尾的请求都要用php-fastcgi来处理 AddType application/x-httpd-php .php #增加MIME类型 Action application/x-httpd-php /fcgi-bin/php-cgi #设置php-fastcgi的处理器: /usr/local/php/bin/php-cgi <Directory /usr/local/httpd/fcgi-bin/> Options Indexes ExecCGI Order allow,deny allow from all </Directory> </VirtualHost>

4).restart 下apache,查看phpinfo,如果服务器信息是:
Apache/2.2.11 (Unix) mod_fastcgi/2.4.6之类的就说明安装成功了。
如果出现403的错误,查看下/usr/local/httpd/fcgi-bin/是否有足够的权限。
或者

<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>

就可以了。
ps -ef|grep  php-cgi可以看见10个fastcgi进程在跑。

3.   CLI模式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/328d0676be35cfcea55271850c0fc78a.html