当前位置: 首页 > 知识库问答 >
问题:

PHP是如何工作的,它的体系结构是什么?

乜栋
2023-03-14

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

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

我在谷歌上搜索过这个问题,但90%的文章解释了如何用PHP实现和构造web应用程序,这不是我想要的。

共有3个答案

冷宏茂
2023-03-14

一般来说,作为引擎的PHP将PHP文件的内容(通常为*.PHP,尽管偶尔会使用其他扩展名)解释为抽象语法树。PHP引擎然后处理翻译后的AST,然后根据需要的输入和处理返回结果。

下图将描绘更多信息

来源:freecodecamp。组织机构

鲜于璞瑜
2023-03-14

这就是PHP的工作原理:

(互联网上最好的之一)

韩单弓
2023-03-14

JavaWeb服务器和PHP的最大区别在于PHP没有自己的内置Web服务器。(嗯,较新的版本可以,但它应该只是为了测试,它不是一个生产就绪的网络服务器。)PHP本身基本上是一个可执行文件,它读取PHP代码的源代码文件,并解释/执行该文件中写入的命令。就这样了。简而言之,这就是PHP的体系结构。

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

实际上,用PHP编写的web服务在第三方web服务器(通常是Apache)上运行,该服务器处理任何传入的请求,并以给定的请求PHP源代码文件作为参数调用PHP解释器,然后将该过程的任何输出返回HTTP客户机。这也意味着不存在像Java通常那样始终以持久状态运行的持久化PHP进程,但是每个请求都是通过启动然后拆下一个新的PHP实例来处理的。

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

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

如果这听起来像是一个典型的PHP应用程序,更多的是由几个不同的组件粘合在一起的累积,那么您是正确的。Java是非常独立的,除了RDBMS服务器等外部产品。另一方面,PHP往往依赖于大量的第三方产品;这可以发挥其优势,因为您可以在特定任务中使用同类最佳的产品,但也需要更多处理不同系统的开销。

 类似资料:
  • 为了减少内核或跨进程内存泄漏(Spectre攻击),Linux内核1将使用一个新选项编译,引入到,以便通过所谓的retpoline执行间接调用。 这似乎是一个新发明的术语,因为谷歌搜索只是最近才使用(通常都是在2018年)。 1但是,它不是Linux特有的--类似或相同的构造似乎被用作其他操作系统缓解策略的一部分。

  • 本文向大家介绍javascript中的ribs.js的体系结构是什么?,包括了javascript中的ribs.js的体系结构是什么?的使用技巧和注意事项,需要的朋友参考一下 BackboneJS为Web应用程序提供了一种结构,该结构允许分离业务逻辑和用户界面逻辑。 BackboneJS的体系结构包含以下模块- HTTP请求 HTTP客户端以请求消息的形式向服务器发送HTTP请求,其中Web浏览器

  • 我刚刚开始在Haskell中编程,我遇到了以下定义:

  • 问题内容: 我不太了解其工作原理和作用。 我的主要目标是将它与配合使用以提高精度。 问题答案: 使用要跟踪字符串和重复值 通常按项目本身跟踪每个项目。对于给定的阵列,试图跟踪由每个变化的。问题是我们有重复的值,而角度将引发错误。解决该问题的一种方法是通过其他方式对对象进行角度跟踪。对于字符串,这是一个很好的解决方案,因为您实际上没有其他跟踪字符串的方法。 并触发摘要和输入焦点 您暗示您对角度有些陌

  • 假设我们有一个名为托管在tomcat上的服务提供商应用程序,用户单击指向SP a的链接。SP a没有看到提供的令牌,因此它会将用户重定向到IdP进行身份验证(通过某种方式提供SAML Authn请求)。然后,IdP将用户重定向到提供凭据的某个公共登录页面,假设这些凭据正确,IdP将创建一个SAML响应,其中包含一个令牌和一些关于主题的断言,并将其发送回SP a。SP a看到了这一点,并允许用户访问

  • 我搜索过,似乎这被称为列表理解,但它是如何工作的?