gpt4 book ai didi

php - 如何在 PHP 中的请求之间持久化对象

转载 作者:IT王子 更新时间:2023-10-29 00:13:20 24 4
gpt4 key购买 nike

我过去一直在使用 Rails、merb、django 和 asp.net mvc 应用程序。他们的共同点(与问题相关)是他们拥有设置框架的代码。这通常意味着创建持续存在的对象和状态,直到 Web 服务器被回收(例如设置路由,或检查哪些 Controller 可用等)。

据我所知,PHP 更像是一个 CGI 脚本,每次运行时都会被编译成一些字节码,并在请求后被丢弃。当然,您可以拥有 session ,以在来自同一用户的请求之间持久保存数据,正如我所看到的,有像 APC 这样的扩展,您可以使用它在服务器级别的请求之间持久保存对象。

我的问题是:如何创建一个像 Rails 等一样工作的 PHP 应用程序?我的意思是应用程序在第一次请求时设置框架,然后在第二次和以后的请求中使用已经设置的对象。 mod_php 中是否有一些内置的缓存设施? (例如,存储已执行的 php 应用程序的已编译字节码)或者使用 APC 或一些类似的扩展是解决此问题的唯一方法?你会怎么做?

谢谢。

编辑:替代问题:如果我创建一个大型 PHP 应用程序,它的设置时间非常长,但运行时间很短(如在上面提到的框架中),那么我应该如何“缓存”已经设置好的东西(这可能意味着很多事情,除了数据库连接,因为为此您已经在 PHP 中建立了持久连接)。

证明大量的设置时间是合理的:如果我使用 PHP 反射来检查哪些对象可用并根据它设置运行时会怎样。进行大量反射(reflection)通常很慢,但只需进行一次(并且只有在修改源代码时才重新评估)。

EDIT2:看来是 APC。知道它会自动缓存字节码这一事实是件好事。

最佳答案

不确定 APC 是否是唯一的解决方案,但 APC 会解决您的所有问题。

首先,您的脚本将使用 APC 编译一次,并将字节码存储在内存中。

如果你有一些东西需要很长时间来设置,你也可以将它缓存在 APC 中作为用户数据。例如,我一直这样做,

            $table = @apc_fetch(TABLE_KEY);

if (!$table) {
$table = new Table(); // Take long time
apc_store(TABLE_KEY, $table);
}

使用 APC,每个服务器实例只执行一次创建表的任务。

关于php - 如何在 PHP 中的请求之间持久化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2940610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com