我需要一些帮助来理解 PHP 的内部工作原理。
还记得,在过去,我们曾经写过 TSR(Terminate and stay resident)例程(pre-windows 时代)吗?一旦该程序被执行,它将保留在内存中并且可以通过一些热键(alt- 或 ctrl- 组合键)重新执行。
我想在网络服务器/应用程序中使用类似的概念。比如说,我有 common_functions.php,它包含在该 apache/php 服务器上运行的所有 Web 应用程序的通用函数(如 Generate_City_Combo()、Check_Permission() 或 Generate_User_Permission_list() 等)。
在所有模块或应用程序的php文件中,我可以写:
require_once(common_functions.php);
它将在所有模块和应用程序中包含该公共(public)文件并且工作正常。
我的问题是:php 是如何在内部处理这个问题的?
说我有:
两个应用 AppOne 和 AppTwo。
AppOne有两个菜单选项AppOne_Menu_PQR和AppOne_Menu_XYZ
AppTwo 有两个菜单选项 AppTwo_Menu_ABC 和 APPTwo_Menu_DEF
所有这四个菜单项都调用 common_functions.php 中的函数{如 Generate_City_Combo()、Check_Permission() 或 Generate_User_Permission_list()}
现在考虑以下场景: A) 用户 XXX 登录并从他的个性化控制面板点击 AppOne_Menu_PQR,然后她/他按照所有屏幕和说明进行操作。这是一系列 8-10 个页面请求(屏幕),并且是交互式的。结束后,用户 XXX 从他的个性化仪表板中单击 AppTwo_Menu_DEF,并再次像之前一样她/他遵循所有屏幕和说明(大约 8-10 页/屏幕)。然后用户 XXX 注销。
B) 用户 XXX 登录并执行场景 A 中提到的任何操作。同时,用户 YYY 也登录(从其他客户端计算机)并执行场景 A 中提到的类似操作。
对于场景 A,它是同一 session 。对于场景 B,有两个不同的 session 。
假设所有菜单选项调用 Generate_User_Permission_list() 和 Generate_Footer() 或许多菜单选项调用 Generate_City_Combo()。
那么 PHP 会在每个页面请求中执行/包含 common_functions.php 多少次?每个 session ?或每次 PHP 启动/关闭?我的理解是 common_functions.php 将在每个页面请求/周期/加载/屏幕执行一次,对吗?基本上每次互动一次。
请记住像 Generate_City_Combo() 或 Generate_Footer() 这样的函数会产生相同的输出或做相同的事情,而不管调用者是谁或何时调用。
我想将此限制为每次应用程序启动和关闭一次。
这些只是例子。我的实际问题要复杂得多。在我的应用程序中,我想只调用一次 Application_Startup() 例程,这将创建理想的环境(如所有查找和引用数据结构、只读数据、安全矩阵、菜单选项、上下文相关的业务执行逻辑等。 .).之后所有到达服务器的请求都不需要花费任何时间或资源来创建环境,而是可以立即引用“已经创建的环境”。
这在 PHP 中可行吗?如何?你能告诉我一些解释 PHP 内部工作的地方或书籍吗?
提前致谢。
最佳答案
PHP 在完全独立的执行框架中处理每个 HTTP 请求 - 没有持续运行的进程来为所有请求提供服务。 (您的网络服务器正在运行,但每次加载 PHP 页面时,都会调用一个单独的 PHP 解释器实例。)
如果生成所需的持久区域所需的时间很长,您可能希望考虑将这些脚本的输出缓存在磁盘上,并在可用(且未过时)的情况下首先加载缓存的版本。
关于PHP 架构 : How do I do that?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346232/
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有
“架设一个亿级高并发系统,是多数程序员、架构师的工作目标。许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。”开篇要实现软件设计、软件开发在一个统一的思想、统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束。虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍然是必要的,为了开发一个支持DDD的框架,首先需要理解DDD的基本概念和核心的组件。一.什么是领域驱动设计(DDD)首先要知道DDD是一种开发理念,核心是维护一个反应领域概
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob
Lisp是否适合Web编程/应用程序(交互式),就像ruby和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common
我在当前项目中使用由Oracle数据库和memcached支持的RubyonRails。有一个非常常用的功能,它依赖于单个数据库View作为数据源,并且该数据源内部有其他数据库View和表。这是一个虚拟数据库View,能够从一个地方访问所有内容,而不是物化数据库View。大多数情况下,如果用户正在使用他们希望更新的功能,那么让数据保持最新很重要。从这个View获取数据时,我将安全表内部连接到View(安全表不是View本身的一部分),其中包含一些我们用来在更细粒度级别上控制数据访问的字段。例如,安全表有user_id,prop_1,prop_2列,其中prop_1,prop_2是数据库
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。 因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不
前言 前端时间PHP项目部署升级需要,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。一、部署步骤1.创建Dockerfile文件Dockerfile是一个用来构建镜像的文本文件,在容器运行时,需要把项目文件和项目运行所必须的组件安装其中。#基础镜像FROMphp:7.4-fpm#时区ARGTZ=Asia/Shanghai#更换容器时区RUNcp"/usr/share/zoneinfo/$TZ"/etc/localtime&&echo"$TZ">/etc/timezone#替换成阿里apt-get源RUNsed-i"s@http