【发布时间】:2015-04-15 21:43:17
【问题描述】:
我正在检索目录中的所有文件并缓存该值,这样我就不必一次又一次地检索它
$memefiles = glob("usermemes/*.jpeg");
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
有没有办法缓存这个结果,这样我就不必一次又一次地执行这些功能。
【问题讨论】:
-
如何使用cookies
我正在检索目录中的所有文件并缓存该值,这样我就不必一次又一次地检索它
$memefiles = glob("usermemes/*.jpeg");
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
有没有办法缓存这个结果,这样我就不必一次又一次地执行这些功能。
【问题讨论】:
有很多方法可以优化或缓存,最好的方法取决于您要缓存的内容、数量和所需的刷新频率。例子是
在这种情况下,我认为预先计算会满足您的需求。只需将您的代码放在一个脚本中,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 / 命令行工具而异,如果您有现场服务器或使用专业的虚拟主机,则会有所不同。因此,请在 stackoverflow 中搜索适合您特定情况的 cron 作业。
假设您有一个 cron 作业正在运行,将 $total_pages 的值保存到文件中,那么您将通过以下方式在网页上检索您的值
$total_pages = file_get_contents('totalpages.dat');
保证这将提高所有需要提供$total_pages 值的页面的性能。与accepted answer相比,这个解决方案有一些显着的优势:
【讨论】:
$memefiles?
$memefiles 只是一个简单的数组,您可以使用 $content_to_file = implode(',', $memefiles); 将其作为字符串保存到文件中,然后从文件中读取内容,将其转换回数组$memefiles = explode(',', $content_from_file);
file_get_contents 的输出本身会被缓存,请参阅stackoverflow.com/q/9555658/1407478,您存储值的文件的内容很可能由操作系统本身保存在内存中。所以在实践中,你最终会从内存中读取一个字符串,偶尔会被 cron 作业更新 = 一个真正的缓存。
使用 cookie。为了将数组存储在 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);
}
?>
希望对你有帮助
【讨论】:
setcookie('memes', $memefiles, time() + (8640000000 * 30), "/");
$_COOKIE['calculation']换成$_SESSION['calculation']吗,因为文件的数量需要定期更新。