php的工作模式cgi(PHP是什么工作)

本文目录一览:

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模式下的管理工作,不过有不少缺点。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/307077.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相关推荐

  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • PHP怎么接币

    想要在自己的网站或应用中接受比特币等加密货币的支付,就需要对该加密货币拥有一定的了解,并使用对应的API进行开发。本文将从多个方面详细阐述如何使用PHP接受加密货币的支付。 一、环…

    编程 2025-04-29
  • Git config命令用法介绍:用正确的邮箱保障开发工作

    本文将详细介绍如何使用git config命令配置Git的全局和本地用户信息,特别是如何正确使用用户邮箱,保障Git操作的正常进行。 一、git config命令介绍 Git中的每…

    编程 2025-04-29
  • 自学Python能否找到工作

    自学Python的人越来越多,大家都知道Python是一门很受欢迎的语言,但是很多人还是会担心自学Python后能否找到工作。那么,从以下几个方面来分析一下自学Python能否找到…

    编程 2025-04-28
  • 学Python可以应聘哪些工作?

    Python是近年来最热门的编程语言之一,它具有简洁易学、高效灵活等特点,广泛应用于数据分析、人工智能、爬虫、Web开发等领域。下面将从不同方面介绍,学Python后可以应聘哪些工…

    编程 2025-04-28
  • 使用PHP foreach遍历有相同属性的值

    本篇文章将介绍如何使用PHP foreach遍历具有相同属性的值,并给出相应的代码示例。 一、基础概念 在讲解如何使用PHP foreach遍历有相同属性的值之前,我们需要先了解几…

    编程 2025-04-28
  • 类加载的过程中,准备的工作

    类加载是Java中非常重要和复杂的一个过程。在类加载的过程中,准备阶段是其中一个非常重要的步骤。准备阶段是在类加载的连接阶段中的一个子阶段,它的主要任务是为类的静态变量分配内存,并…

    编程 2025-04-28
  • 手机安全模式怎么解除?

    安全模式是一种手机自身的保护模式,它会禁用第三方应用程序并使用仅限基本系统功能。但有时候,安全模式会使你无法使用手机上的一些重要功能。如果你想解除手机安全模式,可以尝试以下方法: …

    编程 2025-04-28
  • Python工作需要掌握什么技术

    Python是一种高级编程语言,它因其简单易学、高效可靠、可扩展性强而成为最流行的编程语言之一。在Python开发中,需要掌握许多技术才能让开发工作更加高效、准确。本文将从多个方面…

    编程 2025-04-28
  • Qt State Machine与状态机模式

    本文将介绍Qt State Machine和状态机模式在Qt中的实现。Qt提供了QStateMachine和QState两个类,可以方便地实现状态机模式,并且能有效地处理复杂的、多…

    编程 2025-04-27

发表回复

登录后才能评论