美文网首页php
关于PHP在企业级开发领域的访谈

关于PHP在企业级开发领域的访谈

作者: 博物馆场景设计 | 来源:发表于2019-12-10 16:30 被阅读0次

    企业软件的一个关键元素就是互操作性,它可以让软件与其他平台交换信息。大家都认为PHP在这方面表现欠佳,因为它的WS-*支持相对来说比较新且功能较少,成熟度不高。关于这点你们

    我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的。PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口)。

    PHP总共有三个模块:内核、Zend引擎、以及扩展层。

    PHP内核用来处理请求、文件流、错误处理等相关操作;

    Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;

    扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。

    比如,我们需要mysql扩展来连接MySQL数据库; 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。

    深入探讨

    真正的内部运行过程没有这么简单。以上过程只是个简略版,让我们再深入挖掘一下,看看幕后还发生了些什么。

    Apache启动后,PHP解释程序也随之启动。PHP的启动过程有两步:

    第一步是初始化一些环境变量,这将在整个SAPI生命周期中发生作用;

    第二步是生成只针对当前请求的一些变量设置。

    PHP启动第一步

    不清楚什么第一第二步是什么?别担心,我们接下来详细讨论一下。让我们先看看第一步,也是最主要的一步。要记住的是,第一步的操作在任何请求到达之前就发生了。

    启动Apache后,PHP解释程序也随之启动。PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态。看看php.ini文件里打开了哪些扩展吧。 MINIT的意思是“模块初始化”。各个模块都定义了一组函数、类库等用以处理其他请求。

    一个典型的MINIT方法如下:

    PHP_MINIT_FUNCTION(extension_name){ /* Initialize functions, classes etc */ }

    PHP启动第二步

    当一个页面请求发生时,SAPI层将控制权交给PHP层。于是PHP设置了用于回复本次请求所需的环境变量。同时,它还建立一个变量表,用来存放执行过程 中产生的变量名和值。PHP调用各个模块的RINIT方法,即“请求初始化”。一个经典的例子是Session模块的RINIT,如果在php.ini中 启用了Session模块,那在调用该模块的RINIT时就会初始化$_SESSION变量,并将相关内容读入;RINIT方法可以看作是一个准备过程, 在程序执行之间就会自动启动。 一个典型的RINIT方法如下:

    PHP_RINIT_FUNCTION(extension_name) { /* Initialize session variables,pre-populate variables, redefine global variables etc */ }

    PHP关闭第一步

    如同PHP启动一样,PHP的关闭也分两步。一旦页面执行完毕(无论是执行到了文件末尾还是用exit或die函数中止),PHP就会启动清理程序。它会按顺序调用各个模块的RSHUTDOWN方法。 RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。

    一个典型的RSHUTDOWN方法如下:

    PHP_RSHUTDOWN_FUNCTION(extension_name) { /* Do memory management, unset all variables used in the last PHP call etc */ }

    PHP关闭第二步

    最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步:PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。

    一个典型的RSHUTDOWN方法如下:

    PHP_MSHUTDOWN_FUNCTION(extension_name) { /* Free handlers and persistent memory etc */ }

    这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。

    延伸阅读

    此文章所在专题列表如下:

    PHP内核探索:从SAPI接口开始

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

    PHP内核探索:一次请求生命周期

    PHP内核探索:单进程SAPI生命周期

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

    PHP内核探索:Zend引擎

    PHP内核探索:再次探讨SAPI

    PHP内核探索:Apache模块介绍

    PHP内核探索:通过mod_php5支持PHP

    PHP内核探索:Apache运行与钩子函数

    PHP内核探索:嵌入式PHP

    PHP内核探索:PHP的FastCGI

    PHP内核探索:如何执行PHP脚本

    PHP内核探索:PHP脚本的执行细节

    PHP内核探索:操作码OpCode

    PHP内核探索:PHP里的opcode

    PHP内核探索:解释器的执行过程

    PHP内核探索:变量概述

    PHP内核探索:变量存储与类型

    PHP内核探索:PHP中的哈希表

    PHP内核探索:理解Zend里的哈希表

    PHP内核探索:PHP哈希算法设计

    PHP内核探索:翻译一篇HashTables文章

    PHP内核探索:哈希碰撞攻击是什么?

    PHP内核探索:常量的实现

    PHP内核探索:变量的存储

    PHP内核探索:变量的类型

    PHP内核探索:变量的值操作

    PHP内核探索:变量的创建

    PHP内核探索:预定义变量

    PHP内核探索:变量的检索

    PHP内核探索:变量的类型转换

    PHP内核探索:弱类型变量的实现

    PHP内核探索:静态变量的实现

    PHP内核探索:变量类型提示

    PHP内核探索:变量的生命周期

    PHP内核探索:变量赋值与销毁

    PHP内核探索:变量作用域

    PHP内核探索:诡异的变量名

    PHP内核探索:变量的value和type存储

    PHP内核探索:全局变量Global

    PHP内核探索:变量类型的转换

    PHP内核探索:内存管理开篇

    PHP内核探索:Zend内存管理器

    PHP内核探索:PHP的内存管理

    PHP内核探索:内存的申请与销毁

    PHP内核探索:引用计数与写时复制

    PHP内核探索:PHP5.3的垃圾回收机制

    PHP内核探索:内存管理中的cache

    PHP内核探索:写时复制COW机制

    PHP内核探索:数组与链表

    PHP内核探索:使用哈希表API

    PHP内核探索:数组操作

    PHP内核探索:数组源码分析

    PHP内核探索:函数的分类

    PHP内核探索:函数的内部结构

    PHP内核探索:函数结构转换

    PHP内核探索:定义函数的过程

    PHP内核探索:函数的参数

    PHP内核探索:zend_parse_parameters函数

    PHP内核探索:函数返回值

    PHP内核探索:形参return value

    PHP内核探索:函数调用与执行

    PHP内核探索:引用与函数执行

    PHP内核探索:匿名函数及闭包

    PHP内核探索:面向对象开篇

    PHP内核探索:类的结构和实现

    PHP内核探索:类的成员变量

    PHP内核探索:类的成员方法

    PHP内核探索:类的原型zend_class_entry

    PHP内核探索:类的定义

    PHP内核探索:访问控制

    PHP内核探索:继承,多态与抽象类

    PHP内核探索:魔术函数与延迟绑定

    PHP内核探索:保留类与特殊类

    PHP内核探索:对象

    PHP内核探索:创建对象实例

    PHP内核探索:对象属性读写

    PHP内核探索:命名空间

    PHP内核探索:定义接口

    PHP内核探索:继承与实现接口

    PHP内核探索:资源resource类型

    PHP内核探索:Zend虚拟机

    PHP内核探索:虚拟机的词法解析

    PHP内核探索:虚拟机的语法分析

    PHP内核探索:中间代码opcode的执行

    PHP内核探索:代码的加密与解密

    PHP内核探索:zend_execute的具体执行过程

    PHP内核探索:变量的引用与计数规则

    PHP内核探索:新垃圾回收机制说明

    作者:PHP架构之路

    链接:https://www.jianshu.com/p/91ac60b4d0c5

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:关于PHP在企业级开发领域的访谈

        本文链接:https://www.haomeiwen.com/subject/hnuggctx.html