php原理简述

本文介绍了PHP语言的基本架构,包括PHP内核、Zend引擎和扩展层的功能,并探讨了如何通过APC等工具提升PHP的执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语言有静态语言和动态语言之分,静态语言一般指先编译后执行,动态语言一般只边解释边执行。静态语言包括c,c++,java等,动态语言有php,javascript,python等。

任何语言都可以设计成动态或者静态,只是因为应用领域和需求不同而有了分别。编译型语言一次编译处处运行,更强调的是执行速度。而动态语言即时编写即时运行,更关注的是灵活。语言没有优劣,优劣的是一用语言的人。

跟开发语言相关的只是是编译原理,大家了解一下就行,编译语言一般的过程有词法分析,语法分析,语法编译,生成中间码,存储管理,优化等。    词法分析的过程会去除所有空格以及注释,所以这些都不会影响程序执行效率。

顺便说一下php的APC(纳入PHP扩展),XCODE,EACCELERATOR优化,这三款都是php加速器。通常情况下php的执行每一次都会有编译成中间码(OPCODE)的过程,而为了提高php的执行效率,加速器的原理就是缓存OPCODE,使得php程序只有第一次的时候进行编译,以后每一次执行直接执行中间码。(缓存是个非常重要的概念,比如模板编译,静态生成,文件缓存,数据库缓存,memcache,nginx反向代理等)

 

下面说一下php语言本身的架构,如图:

 

 

 

 

一般考虑php组成主要简化分为3大块,php内核,Zend引擎,扩展层:


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

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

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

 

Php外部通用通信接口SAPI简介:

SAPI指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了PC的接口规范都可以在PC上正常运行, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。

通常,我们使用Apache或者Nginx这类Web服务器来测试PHP脚本,或者在命令行下通过PHP解释器程序来执行。 脚本执行完后,Web服务器应答,浏览器显示应答信息,或者在命令行标准输出上显示内容。

我们很少关心PHP解释器在哪里。虽然通过Web服务器和命令行程序执行脚本看起来很不一样, 实际上它们的工作流程是一样的。命令行参数传递给PHP解释器要执行的脚本, 相当于通过url请求一个PHP页面。脚本执行完成后返回响应结果,只不过命令行的响应结果是显示在终端上。

脚本执行的开始都是以SAPI接口实现开始的。只是不同的SAPI接口实现会完成他们特定的工作,例如Apache的mod_php SAPI实现需要初始化从Apache获取的一些信息,在输出内容是将内容返回给Apache,其他的SAPI实现也类似。

脚本执行的开始都是以SAPI接口实现开始的。只是不同的SAPI接口实现会完成他们特定的工作,例如Apache的mod_php SAPI实现需要初始化从Apache获取的一些信息,在输出内容是将内容返回给Apache,其他的SAPI实现也类似。

MINIT    apache启动的整个生命周期或者命令行的执行过程中,只执行一次

RINIT     脚本被请求是激活模块

 

RSHUTDOWN 请求结束,或者脚本结束是运行。 Eg:可以记录运行时间

MSHUTDOWN SAPI生命周期结束时执行。

 

 

单进程请求

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


 

多进程请求

 

### Ajax 工作原理详解 Ajax(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。其核心思想是通过在后台与服务器进行少量数据交换,使网页能够不重新加载的情况下更新部分数据。以下是 Ajax 的工作原理详细说明: #### 1. 创建 XMLHttpRequest 对象 Ajax 的实现依赖于 `XMLHttpRequest` 对象,这是整个 Ajax 技术的核心。该对象用于向服务器发送请求并接收响应[^3]。 ```javascript var xhr = new XMLHttpRequest(); ``` #### 2. 设置请求参数 使用 `open()` 方法来初始化一个请求。此方法需要指定请求类型(GET 或 POST)、URL 地址以及是否异步执行请求。 ```javascript xhr.open("GET", "example.php", true); ``` 如果需要发送 POST 请求,则需要设置请求头以确保服务器正确解析数据[^5]。 ```javascript xhr.open("POST", "example.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ``` #### 3. 发送请求 使用 `send()` 方法将请求发送到服务器。对于 GET 请求,可以直接调用 `send(null)`;而对于 POST 请求,则需要在 `send()` 方法中传递数据。 ```javascript xhr.send("name=John&age=30"); ``` #### 4. 接收服务器响应 当服务器返回响应时,`XMLHttpRequest` 对象的 `onreadystatechange` 事件会被触发。可以通过监听该事件来处理服务器返回的数据。只有当 `readyState` 属性值为 4 且 `status` 属性值为 200 时,才表示请求成功完成[^3]。 ```javascript xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; ``` #### 5. 更新页面内容 一旦接收到服务器的响应数据,就可以通过 JavaScript 操作 DOM 来更新页面上的内容,而无需重新加载整个页面[^2]。 ```javascript document.getElementById("result").innerHTML = xhr.responseText; ``` ### 示例代码 以下是一个完整的 Ajax 示例,展示如何通过 GET 请求获取数据并更新页面内容。 ```javascript function loadDoc() { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { document.getElementById("demo").innerHTML = xhr.responseText; } }; xhr.open("GET", "example.php", true); xhr.send(); } ``` ### 总结 Ajax 的工作原理可以概括为以下几个步骤:创建 `XMLHttpRequest` 对象、设置请求参数、发送请求、接收服务器响应以及更新页面内容。这一过程实现了局部刷新的功能,极大地提升了用户体验[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值