php - 记住 MYSQL 查询结果以便在 PHP 页面中使用

标签 php mysql caching cookies raspberry-pi

我设置了一个 PHP 页面来生成从 MYSQL 查询生成的相当大的数据集。

使用此数据,它将根据系统中当前的用户数量创建一定数量的表头(以 html 格式)。

foreach($usersFromMYSQL as $row)
{
    echo
    "
    <th>$someUserData
    <th>Col Y
    <th>Col Z
    ";
}    

然后,它还会根据系统中发生的事件数量,用一定数量的行(在 html 中)填充表

foreach ($eventsFromMYSQL as $row)
{
    echo
    "
    <tr>
    ";

    foreach($usersfromMYSQL as $inner_row)
    {
        echo
        "
        <td>$someUserSpecificEventData1
        <td>$someUserSpecificEventData2
        <td>$someUserSpecificEventData3
        ";
    }
}

此代码已大大简化,但格式与我的网站相同。

我的问题是,我在 Raspberry PI 上运行我的网站,并且由于数据库中的用户和事件数量,该页面的加载时间(预期)很慢。目前,每次您访问该页面时,都会再次请求所有这些数据,并且(至少据我所知)不涉及任何形式的缓存或内存。

数据可能每天都会发生变化,这意味着如果要缓存页面,我希望它只在当天的剩余时间内保持缓存,因为第二天可能会有不同的结果。

我的问题是,有什么解决方案可以防止每次访问页面时重新加载此数据,但确保每天至少重新加载一次?

最佳答案

我假设你使用MVC系统,那么它可能会像这样完成:

  1. 在您的 Controller 中,检查当天的查看页面是否存在。
  2. 如果没有,则获取所有查询并生成所有 HTML 数据,然后使用唯一的文件名(例如 2014_01_01.php)将其保存为 View 文件。之后,加载页面。
  3. 如果存在,则直接加载当天的查看页面。

请注意,一旦生成当前日期的页面,脚本不应再次生成页面。

编辑 1

如果您使用单个文件,

<?php 
     $file_name = date('d_m_Y').".php";
     if(file_exists($file_name))
     {
          //load 
          $page_data = file_get_contents($file_name);
     }
     else
     {
          //generate page here
          //
          $page_data = "....... YOUR HTML PAGE DATA HERE ........ ";
          //save it
          file_put_contents(date('d_m_Y').".php");
     }
     //show page to user
     echo $page_data;
?>

关于php - 记住 MYSQL 查询结果以便在 PHP 页面中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902384/

相关文章:

php - Laravel:第 342 行的非法字符串偏移量 'file',文件 Illuminate/Mail/Mailable.php

php - 成员(member)制

mysql - Django、nginx 和 uWSGI 缓存结果直到 uWSGI/MySQL 重启

缓存函数结果 f#

css - 防止 CSS 和 jQuery(移动)被缓存

php - MySQL PHP,表内表(每个条目多行)

php - MYSQL 时间戳在插入时为空

java - MySQL 或 Hibernate 缓存问题接收旧数据

php - 表名的 laravel mysql 列

mysql - 如何处理 MySQL 服务器使用 --secure-file-priv 选项运行,因此它无法在 Mac 上执行此语句