伙计们,最近我决定回到PHP,做一些比简单登录页面更复杂的事情。三年来,我一直在使用Java / JavaEE进行编程,并且对Java应用程序的体系结构有很好的了解。基本上,虚拟机(一个简单的OS进程)运行称为字节码的已编译代码。一个简单的Java Web服务器基本上是一个Java应用程序,它侦听所提供的TCP端口上的Http请求并做出相应的响应,这当然要复杂得多,但这是其最初的工作。
现在,PHP呢?它是如何工作的 ?简而言之,就是它的体系结构。
我在这个问题上用谷歌搜索,但是在90%的文章中,我解释了如何用PHP来实现和构建Web应用程序,这不是我想要的。
Java Web服务器和PHP之间的最大区别是PHP没有自己的内置Web服务器。(嗯,较新的版本可以使用,但是应该仅用于测试,它不能用于生产环境的Web服务器。)PHP本身基本上是一个可执行文件,可读取PHP代码的源代码文件并解释/执行该代码中的命令。文件。而已。简而言之,这就是PHP的体系结构。
该可执行文件支持用户API代码可以调用的默认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中请求之间的数据持久性则通过多种方法来处理,例如内存缓存,会话,数据库,文件等。视情况而定。PHP确实具有操作码缓存插件,其工作类似于Java字节码,只是这样,PHP不必在每次执行相同文件时都重复相同的解析和编译过程。
请记住,编写一个持久运行的PHP程序(就像Java一样运行)是完全可行的,这根本不是PHP的默认方式。就个人而言,我非常喜欢为在Gearman或ZMQ上持续运行的特定任务编写工作人员,并且在Web服务器上运行一些短暂脚本作为“前端”,根据需要将工作委托给这些工作人员。
如果这听起来像一个典型的PHP应用程序,而不仅仅是几个不同组件的胶粘在一起,那您是正确的。Java是非常独立的,除了RDBMS服务器之类的外部产品。另一方面,PHP通常倾向于依赖一堆第三方产品。在可以将最佳产品用于特定任务的意义上,它可以发挥其优势,但是在处理不同系统时也需要更多开销。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句