如何在没有数据库的情况下每5分钟保存Php变量

时间:2012-02-24 13:45:35

标签: php

在我的网站上有一个php函数func1(),它从其他资源获取一些信息。运行此功能的成本非常高。

我希望当Visitor1访问我的网站时,执行此func1()并将值存储在$variable1=func1();中的文本文件中(或其他内容,但不是数据库)。

然后开始5分钟的时间间隔,在此间隔期间,Visitor2访问我的网站,然后他从文本文件中获取值而不调用函数func1()

当Visitor3进入20分钟时,应该再次使用该功能并将新值存储5分钟。

如何制作?一个小的工作示例会很好。

4 个答案:

答案 0 :(得分:2)

将其存储在一个文件中,并使用filemtime().检查文件的时间戳。如果它太旧,请刷新它。

$maxage = 1200; // 20 minutes...
// If the file already exists and is older than the max age
// or doesn't exist yet...
if (!file_exists("file.txt") || (file_exists("file.txt") && filemtime("file.txt") < (time() - $maxage))) {
  // Write a new value with file_put_contents()
  $value = func1();
  file_put_contents("file.txt", $value);
}
else {
  // Otherwise read the value from the file...
  $value = file_get_contents("file.txt");
}

注意:已经有专门的缓存系统,但是如果你只需要担心这个值,这是一个简单的缓存方法。

答案 1 :(得分:2)

您要完成的任务称为缓存。您在此处看到的其他一些答案描述了最简单的缓存:文件。缓存还有许多其他选项,具体取决于数据大小,应用程序需求等。

以下是一些缓存存储选项:

  • 文件
  • Database / SQLite(是的,您可以缓存到数据库)
  • 分布式缓存
  • APC
  • 了XCache

您还可以缓存许多内容。以下是一些:

  • 纯文本/ HTML
  • PHP对象等序列化数据
  • 功能调用输出
  • 完整页面

对于一种简单但可配置的缓存方式,您可以使用Zend Framework中的Zend_Cache组件。这可以单独使用,而不必将整个框架用作described in this tutorial

我看到有人说使用Sessions。这是您想要的,因为会话仅对当前用户可用。

以下是使用Zend_Cache的示例:

include ‘library/Zend/Cache.php’;

// Unique cache tag
$cache_tag = "myFunction_Output";

// Lifetime set to 300 seconds = 5 minutes
$frontendOptions = array(
   ‘lifetime’ => 300,
   ‘automatic_serialization’ => true
);

$backendOptions = array(
    ‘cache_dir’ => ‘tmp/’
);

// Create cache object 
$cache = Zend_Cache::factory(‘Core’, ‘File’, $frontendOptions, $backendOptions);

// Try to get data from cache
if(!($data = $cache->load($cache_tag)))
{
    // Not found in cache, call function and save it
    $data = myExpensiveFunction();
    $cache->save($data, $cache_tag);
}
else
{
    // Found data in cache, check it out
    var_dump($data);
}

答案 2 :(得分:1)

在文本文件中。最省钱的方式(差不多)。或者使用cronjob在访问时每隔5分钟运行一次带有该功能的脚本。

答案 3 :(得分:0)

使用缓存,例如APC!

如果资源非常大,这可能不是最佳选择,文件可能确实更好。

看看:

  • apc_store
  • apc_fetch
祝你好运!