本文目录一览:
- 1、PHP运行模式是ISAPI和CGI的区别?
- 2、什么是PHP的CGI模式
- 3、服务器的php运行是php-cgi模式
- 4、php和cgi之间的区别
- 5、php 与 php-cgi问题
- 6、什么是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI
PHP运行模式是ISAPI和CGI的区别?
ISAPI执行方式是以DLL动态库的形式使用,它能实现CGI提供的全部功能,并在此基础上进行了扩展,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,这样来提高程序的执行效率;
CGI执行方式,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。 CGI方式在遇到连接请求(用户请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and-execute模式。所以用cgi 方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。都会当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
什么是PHP的CGI模式
CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和Web服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
服务器的php运行是php-cgi模式
检查 PHPINFO 里 确定是ISAPI了吗?
可以设置每个网站运行的帐号 不用默认的IIS_帐号 这样即安全 又可以在任务管理器中跟踪....
php和cgi之间的区别
cgi是一种接口,不管用什么语言都可以按照这个接口进行实现。一般服务器判断需要调用cgi程序前,会把请求的GET参数放在环境变量QUERY_STRING里,POST请求内容则通过标准输入流输送到cgi程序内。cgi程序只需要将HTTP协议(包括HTTP头和HTTP Body)打印到标准输出流stdout,服务器就会把它们直接传输给浏览器。
举个栗子:
//c++实现cgi接口,打印query string和post data
#include iostream
using namespace std;
int main() {
cout "Content-type:text/html\n\n";
const char *queryString = getenv("QUERY_STRING");
if (queryString != NULL) {
cout "h1query string is :" queryString "/h1" endl;
} else {
cout "pNo query string/p" endl;
}
string postData, tmpData;
while(cin tmpData) {
postData += tmpData;
}
if (postData != "") {
cout "div " postData " /div" endl;
} else {
cout "pNo post data/p" endl;
}
return 0;
}
把它编译好,命名为test.cgi,然后扔到服务器到cgi目录里。然后访问类似于;c=d的URL,服务器就会把a=bc=d放到QUERY_STRING环境变量中传给test.cgi。最后能看到页面上显示出query string is a=bc=d。也可以创建一个表单,把数据POST到,然后可以看到页面上显示出所有的POST data。
php是一种脚本语言,它可以用来做很多事。。。比如说用来写CGI程序:
#!/usr/env php
?php
echo "Content-type:text/html\n\n";
$queryString = $_ENV("QUERY_STRING");
if ($queryString != NULL) {
echo "h1query string is : $queryString/h1";
} else {
echo "pNo query string/p";
}
$postData = file_get_contents("php://stdin");
if ($postData != "") {
echo "div $postData /div";
} else {
echo "pNo post data/p";
}
?
好吧它的功能跟上面C++写的程序一毛一样,我们把它加上“可执行属性”chmod +x testphp.cgi然后扔到cgi目录,然后访问;c=d,以及用表单post数据给它,看到的效果应该是一样的。
所以你也看到了,服务器调用CGI程序,它才不管你用啥实现的,反正接口都定好了,只要按接口来编程就行。
但一般服务器调用PHP和调用CGI程序的逻辑不一样。CGI程序需要自己解析QUERY_STRING和POST_DATA,PHP应该是通过另一套扩展跟服务器交互的,所以一般用PHP直接写网页的时候,写网页的方式跟平时还真不太一样,比如说,服务器的php扩展已经帮我们把query string和post data解析成了数组,我们直接取值就好了:
?php
if (isset($_GET)) {
print_r($_GET);
} else {
echo "pNo query string/p";
}
if (isset($_POST)) {
print_r($_POST);
} else {
echo "pNo post data/p";
}
?
存成test.php之后访问;c=d,或者表单提交内容到页面。可以看到输出的数据都是结构化的,已经变成数组了。而且,HTTP头也不需要我们自己输出了(特殊情况除外)。
php 与 php-cgi问题
建议你暂时放开CGI,实在放不下就看看下面的啰嗦:CGI是一种协议,是WEB服务器调用可执行程序的协议。PHP一般有两种工作模式,一是作为模块,一是作为CGI。因此CGI和PHP就发生了关系。
什么是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI
CGI全称是“公共网关接口”(Common
Gateway
Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute
模式)。它还支持分布式的运算,
即
FastCGI
程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
PHP-CGI是PHP自带的FastCGI管理器。
PHP-FPM是一个PHP
FastCGI管理器,是只用于PHP的
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。