动态PHP内容,存储它并每天执行,而不是每次页面加载



我正在寻找echo出一些内容,这是使用php类从一个源收集。没有其他方法可以获得该内容(它只是文本)。

现在内容是不断变化的,因此默认功能是在每次页面加载时访问和响应它,但是我更喜欢每天更新一次,但继续在每次页面加载时响应内容。

所以我的问题是类文件被编码,因此我不能以这种方式进行更改。我希望我可以创建一些东西来存储文本并将存储的文本返回到第二天,在那里它将运行原始函数以获取新内容。

收集和回显内容的函数:

<?php showcontent($txtonly); ?>

我也不喜欢将内容放在文件中并获取它的内容。希望有人能帮帮我:)

当您从源代码检索它时,写入一个文本文件。在每次加载页面时,检查该文件的使用时间是否超过一天。如果是,则使用常规方法检索新内容并将其保存到文件中。如果时间不超过一天,只需读取本地缓存文件并输出:

$cache_file = '/path/to/file.txt';
// Page was  requested....
// It's less than a day old, just output it.
if (file_exists($cache_file) && filemtime($cache_file) > time() - 86400) {
  echo file_get_contents($cache_file);
}
// It's older than a day, get the new content
else {
  // do whatever you need to get the content
  $content = whatever();
  // Save it into the cache file
  file_put_contents($cache_file, $content);
  // output the new content
  echo $content;
}

注意:您需要确保存储缓存文件的目录可以被web服务器写入。

PHP不是您所需要的"持久"方式。你可以很容易地运行一个PHP脚本通过cron在特定的时间来获取你的变化数据,但你将不得不存储的数据在某个地方,否则它会消失,当这个获取脚本退出。最简单的方法就是使用文件。fetch脚本可以用新数据覆盖它,而其他脚本只需在运行时包含/加载该文件,并在每次更改时自动拾取新数据。

您需要的是一个缓存组件。首先,使用PHP的本地输出控件来捕获showcontent生成的任何内容…接下来,每天将其存储在一个单独的文件中(就像cache.php一样简单)。它可以像一个基于cron的脚本一样简单,在早上03:01运行删除旧文件,并生成一个新文件。

示例生成脚本(每天调用一次)

<?php
$cache_file="cache.php";
$heredoc_sep="START_TO_END_12";//12 just a number to keep it unlikely change as you see fit (must not ever be in CONTENT below)
//Capture content
ob_start();
showcontent($txtonly);
$content=ob_get_contents();
ob_end_clean();
//Store in file
$fp=fopen($cache_file,"w");//Truncates to zero length
fwrite($fp,"<?phpnecho <<<$heredoc_sepn");
fwrite($fp,$content);
fwrite($fp,"$heredoc_sep;n");
fclose($fp);
?>

现在使用结果,只用<?php include("cache.php");?>代替<?php showcontent($txtonly); ?>

除了其他答案之外:如果不能从编码的类中获得字符串形式的内容,可以使用PHP的输出控制函数,如下所示:

ob_start();
showcontent($txtonly);
$content = ob_get_clean();

最新更新