PHP介绍和Apache的Module、CGI与FastCGI

静态网站是指全部由HTML(标准通用标记语言的子集)代码格式页面组成的网站,所有的内容包含在网页文件中。网页上也可以出现各种视觉动态效果,如GIF动画、FLASH动画、滚动字幕等,而网站主要是静态化的页面和代码组成,一般文件名均以htm、html、shtml等为后缀。

动态网站是指通过网页程序语言编写,当客户请求时执行网页程序脚本,将程序执行的结果返回给客户端。PHP、JSP、ASP等等都是比较常见的动态网页程序。

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言语法吸收了C语言JavaPerl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了CJavaPerl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密优化代码运行,使代码运行更快。  --百度百科

PHP的Zend引擎将整个PHP执行分为两个阶段:

  1.分析PHP代码将其转换为Zend Opcode格式,并存储在内存中
  2.之后执行这些转换后的opcode(opcode是一种将PHP脚本编译后的中间语言,可以加快php的执行速度)

Zend引擎执行PHP代码的具体流程如下:


1.扫描--将PHP代码转换为语言片段(Tokens)

2.分析--将Tokens转换成简单而有意义的表达式

3.编译--将表达式编译成opcode

4.执行--顺次执行opcode,每次一条

PHP结合Apache的方式有三种:

  1. 作为模块:PHP作为Apache的模块,当有php页面的请求时,Apache加载php模块,加载资源并执行php程序,将执行结果返还给客户端。
  2. CGI方式(注:CGI是一个协议,可以实现web服务程序和解释器通信):PHP作为一个独立的功能程序,当有php页面的请求时,Apache通过CGI方式启动一个PHP进程,PHP进程获取资源并执行后,将执行结果返回给Apache,Apache返回给客户端,之后Apache销毁该进程。
  3. FastCGI(注:FastCGI是CGI协议的一个扩展,可以实现将PHP作为一个独立进程,由PHP自身实现进程的创建和销毁):PHP作为一个独立程序,根据配置文件事前启动N个作业进程用来等待处理用户请求(类似于Apache的Prefork模型,规定默认启动进程数、最大启动进程数、最小启动进程数等等),当有php页面的请求时,Apache通过代理方式使用FastCGI协议将请求发送给PHP进程,并指定php网页文件所在位置(URL),PHP进程接收后为其分配一个作业进程并执行脚本。FastCGI好处在于可以使PHP服务作为一个独立服务器,通过Socket与httpd通信,可以使服务分离,可扩展性更强,并且无需像CGI一样需要Apache来控制PHP的启动,提高了Apache的工作效率。
时间: 2024-12-13 18:29:08

PHP介绍和Apache的Module、CGI与FastCGI的相关文章

Which PHP mode? Apache vs CGI vs FastCGI

Which PHP mode? Apache vs CGI vs FastCGI There are multiple ways to execute PHP scripts on a web server. We’re often asked about the difference between these modes, so here it is!We offer the three most common PHP handlers across our Linux Cloud Host

Apache指南:CGI动态页面

概要 相关模块 相关指令 mod_alias mod_cgi AddHandler Options ScriptAlias CGI(公共网关接口[Common Gateway Interface])定义了网站服务器与外部内容协商程序之间交互的方法,通常是指CGI程序或者CGI脚本,是在网站上实现动态页面的最简单而常用的方法.本文将对如何在Apache网站服务器上建立CGI以及如何编写CGI程序作介绍. 配置Apache以允许CGI 要让CGI程序能正常运作,必须配置Apache以允许CGI的执行

selinux 限制 apache exec执行cgi

一.起因某日发现smokeping访问失败,发布的apache 进程不存在:在/usr/local 下找不到任何apache文件,怀疑apache是rpm安装,使用/etc/init.d/httpd启动后果真listen 8001端口··· 二.排查1.获取error日志的关键内容启动后尝试刷新8001 下的smokeping页面,发现仍旧错误,哎,rpm装的apache error日志在哪来着?想不起来了,没办法,迂回一下:首先找到apache的进程号,需要work进程[[email prot

解决apache上访问 cgi脚本时总是在网页中显示出脚本的源代码而不是执行结果的问题

apache是支持cgi脚本的,但是需要保证四个条件: 1.放置cgi脚本的文件夹本身需要对apache服务器这个用户(一般默认用户名是www,linux下的用户机制请自行百度)开放x(即可执行)权限. 2.这个脚本本身必须对apache服务器这个用户开放x权限 3.脚本的首行附有如何使用什么解释器执行该脚本代码的信息 如python脚本首行 #!/usr/bin/env python 4.apache需加载了mod_cgi.so这一动态链接库 最后这个问题不是经常遇到但由于容易被忽略所以常常是

apache:添加cgi模式

最终期望:通过配置apache的cgi能够使得apache能通过cgi方式连接go程序(因为我们的后端程序是用go语言写的). 实验1: 期望:通过配置cgi使得应用程序能够跑起来. go代码: package main import "fmt" func main() { fmt.Println("Content-type: text/plain;\n") for i, j := 0, 5; i <= j; i, j = i+1, j-1 { //right

PHP中CGI,FastCGI,PHP-CGI与PHP-FPM对比

CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.如php,perl,tcl等. FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式).它还支持

CGI、FastCGI和PHP-FPM关系图解

CGI.FastCGI和PHP-FPM关系图解 ? webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器.这就是一个完整的动态PHP Web访问流程,接下来再引出这些概念,就好理解多了, CGI:是 Web Server 与 Web Appl

CGI与FastCGI 转

CGI与FastCGI 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂,所以出现动态技术.但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端.那这个约定就是 common gateway interface,简称

CGI与FastCGI

当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂,所以出现动态技术.但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端.那这个约定就是 common gateway interface,简称cgi.这个协议可以用v