PHP如何工作以及它的架构是什么?

时间:2014-07-17 07:37:03

标签: php

最近我们决定回到PHP并做一些比简单登录页面更复杂的东西。 3年来,我一直在使用Java / JavaEE进行编程,并且对Java应用程序的体系结构有很好的理解。基本上,一个虚拟机(一个简单的OS进程)运行称为字节代码的编译代码。一个简单的Java Web服务器基本上是一个java应用程序,它监听提供的Http请求的TCP端口并相应地响应它当然比这更复杂,但这是它的初始工作。

现在,PHP呢?它是如何工作的 ?简而言之,它的架构是什么。

我用Google搜索了这个问题,但90%的文章解释了如何用PHP实现和构建一个Web应用程序,这不是我想要的。

3 个答案:

答案 0 :(得分:24)

Java Web服务器和PHP之间最大的区别是PHP没有自己的内置Web服务器。 (好吧,新版本可以,但它应该仅用于测试,它不是生产就绪的Web服务器。)PHP本身基本上是一个可执行文件,它读入PHP代码的源代码文件并解释/执行写入的命令文件。而已。简而言之,这就是PHP的架构。

该可执行文件支持userland PHP代码可以调用的默认API,并且可以添加扩展以提供更多API。这些扩展通常用C语言编写,并在安装时与PHP可执行文件一起编译。某些扩展只能通过使用其他标志重新编译PHP来添加,其他扩展可以针对PHP安装进行编译,并在事后通过配置文件激活。 PHP提供PEAR和PECL方面项目,旨在标准化和简化此类事后安装。 Userland PHP代码通常还包括简单用PHP代码编写的其他第三方库。 C扩展的优点是它们的执行速度和低级系统访问,用户态代码库的优点是它们的微不足道的包含。如果您正在管理自己的PHP安装,那么添加新的PHP扩展通常很简单;然而,在非常流行的共享主机模型中,主机想要安装的内容与开发人员需要的内容之间往往存在紧张关系。

实际上,用PHP编写的Web服务运行在第三方Web服务器上,通常是Apache,它处理任何传入的请求并使用给定的请求的PHP源代码文件作为参数调用PHP解释器,然后传递任何输出处理回HTTP客户端。这也意味着没有持久的PHP进程在任何时候都运行持久状态,就像Java通常那样,但每个请求都是通过启动然后拆除新的PHP实例来处理的。

虽然Java只是将持久数据保存在内存中,但PHP中的请求之间的数据持久性是通过许多方法来处理的,如memcache,会话,数据库,文件等。视具体情况而定。 PHP确实有操作码缓存插件,它的工作类似于Java字节代码,因此PHP不必在每次执行同一文件时重复相同的解析和编译过程。

请记住,编写一个像Java一样运行的持久PHP程序是完全可行的,它根本不是PHP的默认操作方式。就个人而言,我非常喜欢在Gearman或ZMQ上为持续运行的特定任务编写工作人员,并在Web服务器上运行一些短暂的脚本作为“前端”,根据需要将工作委派给这些工作人员。

如果这听起来像一个典型的PHP应用程序更多的是几个不同组件的粘合在一起,你是正确的。 Java是非常独立的,除了像RDBMS服务器这样的外部产品。另一方面,PHP往往倾向于依赖一堆第三方产品;在您可以使用最佳产品执行特定任务的意义上,它可以发挥其优势,但也需要更多处理不同系统的开销。

答案 1 :(得分:18)

这是 PHP 的工作原理:

(互联网上最好的之一)

PHP internals

答案 2 :(得分:0)

一般来说,PHP作为引擎将PHP文件(通常为* .php,尽管偶尔使用其他扩展名)的内容解释为抽象语法树。然后,PHP引擎处理转换后的AST,然后在需要任何输入和处理的情况下返回结果。

下图将显示更多信息

enter image description here

来源:freecodecamp.org