zoukankan      html  css  js  c++  java
  • PHP基础架构

    PHP基础架构

    一、PHP简介

      PHP是一种非常流行的高级脚本语言,尤其适合Web开发,快速、灵活和实用是PHP最重要的特点。PHP自1995年由Lerdorf创建以来,在全球得到了非常广泛的应用。

    二、PHP的特性

    PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法,丰富的语法支持、同时支持面向对象、面向过程,相比C、Java等语言具有语法简洁、使用灵活、开发效率高、容易学习等特点。

    开源免费:PHP社群有大量活跃的开发者贡献代码

    快捷:程序开发快,运行快,技术本身学习快,实用性强

    效率高:PHP消耗相当少的系统资源,自动gc机制

    类库资源:有大量可用类库供开发者使用

    扩展性:允许用户使用C/C++扩展PHP

    跨平台:可以在unix、windows、max os等系统上面使用PHP。

    三、PHP的构成   

     

      PHP源码主要由几个目录:SAPI、main、Zend、exe,其中SAPI是应用接口层,main为PHP主要代码(主要是输入/输出、Web通讯,框架的初始化等,如:fastcgi协议解析,扩展加载,配置解析等)它位于ZendVM之上。

      1. SAPI

    PHP本身可以理解为是一个库函数,提供语言的编译与执行服务,它有标准的输入、输出,而SAPI(理解为一个适配器)是PHP的接入层,它接收用户的请求,然后调用PHP内核提供的一些接口完成PHP脚本的执行。SAPI可以认为是PHP的宿主环境,SAPI也是整个PHP框架最外层的一部分。PHP中常用的SAPI三种典型有Cli(命令行执行PHP脚本)、php-fpm(web环境使用PHP的实现)以及Embed(第三发应用嵌入PHP)

      2. ZendVM

    ZendVM是一个虚拟的计算机,介于PHP应用与实际计算机中间,我们编写的PHP代码就是被他解释执行的,它是PHP语言的核心实现,主要由编译器和执行器组成

    其中编译器负责将PHP代码解释为执行器可识别的指令,执行器负责执行编译器解释出来的指令。

      3. Extension

    扩展是PHP内核提供的一套扩充PHP功能的一种方式。

    四、PHP的生命周期

      

      通过以上图片可以得知,PHP生命周期划分为了五个阶段:

      1. 模块初始化阶段php_module_start()

      这个阶段主要是进行PHP框架、Zend引擎的初始化操作。该阶段一般只在SAPI启动先执行一次,对于Fpm而言,就是在Master进程启动时执行的。

    激活SAPI:sapi_activate(),初始化请求信息SG(request_info)、设置POST请求的handler等,在module startup阶段处理完成后将调用sapi_deactivate();

    启动PHP输出:php_output_startup();

    初始化垃圾回收器:gc_globals_ctor(), 分配zend_gc_globals 内存;

    启动Zend引擎

    注册PHP定义的常量:PHP_VERSION、PHP_ZTS、PHP_SAPI……

    解析php.ini:解析完成后所有的php.ini配置保存在configguration_hash 哈希表中。

    映射PHP、Zend核心的php.ini配置:根据解析出的php.ini,获取对应的配置值,将最终的配置插入EG(ini_directives)哈希表中。

    注册用于获取$_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_REQUEST, $_FILES变量的handler;

    注册静态编译的扩展:php_register_internal_extensions_func();

    注册动态加载的扩展:php_ini_register_extensions,将php.ini中配置的扩展加载到PHP中。

    回调各扩展定义的module starup钩子函数,即通过PHP_MINIT_FUNCTION()定义的函数。

    注册php.ini 中禁用的函数、类:disable_functions、disable_classes;

      2. 请求初始化阶段php_request_startup()

    该阶段每个请求都会经历的一个阶段,对于Fpm而言,在worker进程accept一个请求且读取、解析完请求数据后的一个阶段。主要有:

    激活输出:php_output_activate()。

    激活Zend引擎:zend_activate():

    重置垃圾回收器:gc_reset();

    初始化编译器:init_compiler();

    初始化执行器:init_executor();

    初始化词法扫描器:startup_scanner();

    激活SAPI:sapi_actiate()

    回调各扩展定义的request startup 钩子函数:zend_activate_modules();

      3. 执行脚本阶段php_execute_script()

    该阶段包括PHP代码的编译、执行两个核心阶段。

      4. 请求关闭阶段php_request_shutdonw()

        这个阶段将flush输出内容、发送HTTP应答header头,清理全局变量,关闭编译器,关闭执行器等。另外该阶段还要回调各扩展的request shutdown 钩子函数。

      5. 模块关闭阶段php_module_shutdown()

        该阶段主要进行资源清理,PHP各模块关闭操作。

  • 相关阅读:
    Python并行编程(七):线程同步之事件
    Python并行编程(六):线程同步之条件
    Python并行编程(五):线程同步之信号量
    Python并行编程(四):线程同步之RLock
    Python并行编程(三):线程同步之Lock
    UML关系总结——画uml图、流程图、软件结构图、类图、顺序图的方法
    2020,你好!
    字符串和多维数组
    排序算法
    查找技术
  • 原文地址:https://www.cnblogs.com/wilburxu/p/8613621.html
Copyright © 2011-2022 走看看