4

我必须读取一个文件并进行一些计算,而不是将这个计算的结果保存在一个变量中。

我只需要这样做一次。在 Java + Servlet 中,我可以使用 servlet 容器来做到这一点,例如,单例模式。

我知道在 PHP 中我不能这样做。哪种方法更好?在数据库中保存计算(或传输数据)?

4

1 回答 1

9

不,它不会像 Java Servlet 那样工作。您必须找到解决方法。

首先,我假设使用 $_SESSION、$_COOKIE 或 $_REQUEST 通常对您来说是不切实际的,因为您希望保存每个服务器(或每个应用程序)而不是每个“用户会话”的状态。

在您的情况下,使用数据库听起来是可行的。在常规应用程序设计中,它将是最常见的解决方案。

您也可以使用 PHP 的序列化功能执行以下操作:

<?php

$resultfile = 'result.dat';
if(!file_exists($resultfile)) {
    $result = compute_result('foo bar');
    file_put_contents($resultfile, serialize($result));
} else {
    $result = unserialize(file_get_contents($resultfile));
}

使用 PHP 的serialize()尝试尤其可行

  • 您处于仅 PHP 的环境中
  • $result是一种复杂的数据类型,但您不想创建数据库结构并将 $result 也映射到它

如果您不在仅 PHP 的环境中,您可能更喜欢 JSON 或 XML 等其他序列化格式。

此外,序列化结果可以作为字符串存储在数据库中而不是文件中。将其保存到数据库而不是文件将使应用程序更具可扩展性,因为结果将可用于访问同一数据库(集群)的所有服务器。

简而言之:我建议将数据库与序列化结合使用。

于 2012-12-28T21:05:21.467 回答