以图明志

PHP服务器脚本

[专题] PHP内核探索:从SAPI接口开始

Zend SAPI Internals
SAPI提供了一个和外部通信的接口, 对于PHP5.2,默认提供了很多种SAPI, 常见的给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI,本文就从CGI SAPI入手 ,介绍SAPI的机制。 虽然CGI简单,但是不用担心,它包含了绝大部分内容,足以让你深刻理解SAPI的工作原理。

PHP服务器脚本

[专题] PHP内核探索:一次请求的开始与结束

MINIT与RINIT
PHP开始执行以后会经过两个主要的阶段:处理请求之前的开始阶段和请求之后的结束阶段。 开始阶段有两个过程:第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次。

PHP服务器脚本

[专题] PHP内核探索:一次请求生命周期

PHP的启动与关闭
我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的。PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口)。PHP总共有三个模块:内核、Zend引擎、以及扩展层。Apache启动后,PHP解释程序也随之启动。PHP的启动过程有两步……

PHP服务器脚本

[专题] PHP内核探索:单进程SAPI生命周期

处理一次请求后就关闭
CLI/CGI模式的PHP属于单进程的SAPI模式。这类的请求在处理一次请求后就关闭。也就是只会经过如下几个环节: 开始 - 请求开始 - 请求关闭 - 结束 SAPI接口实现就完成了其生命周期。

PHP服务器脚本

[专题] PHP内核探索:多进程/线程的SAPI生命周期

重复请求开始-请求关闭的环节
通常PHP是编译为apache的一个模块来处理PHP请求。Apache一般会采用多进程模式, Apache启动后会fork出多个子进程,每个进程的内存空间独立,每个子进程都会经过开始和结束环节, 不过每个进程的开始阶段只在进程fork出来以来后进行,在整个进程的生命周期内可能会处理多个请求。

PHP服务器脚本

[专题] PHP内核探索:Zend引擎

Zend引擎是PHP实现的核心
Zend引擎是PHP实现的核心,提供了语言实现上的基础设施。例如:PHP的语法实现,脚本的编译运行环境, 扩展机制以及内存管理等,当然这里的PHP指的是官方的PHP实现(除了官方的实现, 目前比较知名的有facebook的hiphop实现,不过到目前为止,PHP还没有一个标准的语言规范),而PHP则提供了请求处理和其他Web服务器的接口(SAPI)。

PHP服务器脚本

[专题] PHP内核探索:再次探讨SAPI

很多操作都是通过SAPI接口实现
在PHP的生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。 这些内置实现的物理位置在PHP源码的SAPI目录。这个目录存放了PHP对各个服务器抽象层的代码, 例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等。

PHP服务器脚本

[专题] PHP内核探索:Apache模块介绍

PHP与Apache
Apache是基于模块化设计的,总体上看起来代码的可读性高于php的代码,它的核心代码并不多,大多数的功能都被分散到各个模块中,各个模块在系统启动的时候按需载入。你如果想要阅读Apache的源代码,建议你直接从main.c文件读起,系统最主要的处理逻辑都包含在里面。

PHP服务器脚本

HTTP服务器是如何实现对PHP的支持的?

主流方案有三种
目前各种服务器HTTP Server对PHP的支持一共有三种:通过HTTP Server内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;通过CGI来实现,这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器。

PHP服务器脚本

[专题] PHP内核探索:通过mod_php5支持PHP

Apache2的mod_php5模块说明
Apache对PHP的支持是通过Apache的模块mod_php5来支持的。如果希望Apache支持PHP的话,在./configure步骤需要指定--with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析。

PHP服务器脚本

[专题] PHP内核探索:Apache运行与钩子函数

Apache的运行过程
Apache的运行分为启动阶段和运行阶段。 在启动阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(*nix系统)或超级管理员Administrator(Windows系统)完成启动, 并且整个过程处于一个单进程单线程的环境中。

PHP服务器脚本

[专题] PHP内核探索:嵌入式PHP

嵌入式PHP类似CLI
从PHP源码目录结构的介绍以及PHP生命周期可知:嵌入式PHP类似CLI,也是SAPI接口的另一种实现。 一般情况下,它的一个请求的生命周期也会和其它的SAPI一样:模块初始化=>请求初始化=>处理请求=>关闭请求=>关闭模块。 当然,这只是理想情况。因为特定的应用由自己特殊的需求,只是在处理PHP脚本这个环节基本一致。

PHP服务器脚本

概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM

各公共网关接口介绍
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

PHP服务器脚本

[专题] PHP内核探索:PHP的FastCGI

FastCGI的整个工作流程
PHP的CGI实现了Fastcgi协议,是一个TCP或UDP协议的服务器接受来自Web服务器的请求, 当启动时创建TCP/UDP协议的服务器的socket监听,并接收相关请求进行处理。随后就进入了PHP的生命周期: 模块初始化,sapi初始化,处理PHP请求,模块关闭,sapi关闭等就构成了整个CGI的生命周期。

PHP服务器脚本

[专题] PHP内核探索:如何执行PHP脚本

Zend引擎是如何解释PHP脚本的
机器只能理解机器语言,那这些语言是怎么被执行的呢, 一般这些语言都需要一个解释器, 由解释器来执行这些源码, 实际上这些语言还是会经过编译环节,只不过它们一般会在运行的时候实时进行编译。为了效率,并不是所有语言在每次执行的时候都会重新编译一遍, 比如PHP的各种opcode缓存扩展。

PHP服务器脚本

[专题] PHP内核探索:PHP脚本的执行细节

PHP-C-汇编-机器码
众所周知,计算机的CPU只能执行二进制的机器码,每种CPU都有对应的汇编语言,汇编语言编译器将汇编语言翻译成二进制的机器语言,然后CPU开始执行这些机器码。汇编语言作为机器语言与程序设计者之间的一个层,给我们带来了很多方便,程序员不需要用晦涩的01数字来书写程序,当然人们并不满足这样的一个进步,于是在汇编语言之上又多了一个层——C语言。
1 / 7 首页 < Prev 1 2 3 4 5 Next > 尾页 页码: