使用PHP缓存变量?

时间:2015-02-15 06:05:25

标签: php caching glob

我正在检索目录中的所有文件并缓存该值,以便我不必一次又一次地检索它

$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);

有没有办法缓存此结果,以便我不必一次又一次地执行这些功能。

2 个答案:

答案 0 :(得分:1)

使用cookies。为了在cookie中存储数组,您必须在json中对其进行编码,然后使用json_decode()对其进行解码。使用以下代码

 <?php

    if(!isset($_COOKIE['calculation'])) {
    $memefiles = glob("usermemes/*.jpeg"); 
    $total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
    setcookie('calculation', json_encode($memefiles), time() + (8640000000 * 30), "/"); // Set the cookie for unlimited time
    }
    else{
    $memefiles = json_decode($_COOKIE['calculation'],true);
    }
    ?>

希望这有助于你

答案 1 :(得分:1)

有许多方法可以优化或缓存,最好的方法取决于您尝试缓存的内容,数量和所需的刷新频率。例子是

  • 将计算结果存储在会话,数据库或文件中 - 然后查找
  • 预先进行计算,然后查找它们
  • 存储您的页面(PHP输出文件)并将存储的版本提供给用户
  • 使用像Varnish这样的缓存/ HTTP加速器。

在这种情况下,我认为前期计算可以满足您的需求。只需将您的代码放在一个脚本calculate.php中,它将计算出的$total_pages值保存到文件中:

<?
$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
file_put_contents('totalpages.dat', $total_pages);
?>

现在设置一个cron作业,每1分钟,每5分钟,每小时或根据您的需要运行calcaulate.php。如果您在Windows服务器上运行,则应使用任务计划程序等效。设置cronjobs非常简单,但它在系统和GUI /命令行工具之间有所不同,如果您有现场服务器或使用专业的虚拟主机,则会有所不同。因此,搜索适合您特定情况的cron作业的stackoverflow。

假设您正在运行cron作业,将$total_pages的值保存到文件中,那么您将在网页上检索您的值

$total_pages = file_get_contents('totalpages.dat');

这将通过保证提升所有需要提供$total_pages值的网页的性能。与accepted answer相比,此解决方案具有一些显着优势:

  • 每次运行任务一次,无论您有1个,10.000个还是1.000.000个用户/页面加载。
  • 用户仍然可以收到近乎新鲜或几乎实时的数据。 cronjob频率决定了多么新鲜。