我有一个多种语言的网站。我有一个方法,可以在数组中返回今天的货币。然后我在表格中显示这些货币。
// --- en/index.php
<?php
include_once "../exchangeRates.php";
$currencies = ReadExchangeRates();
// --- fr/index.php
<?php
include_once "../exchangeRates.php";
$currencies = ReadExchangeRates();
...
// somewhere in the page
<td><?php echo $currencies["eur"]["today"]; ?></td>
因此,每次加载en/
或fr/
或其他语言时,我都会从外部网站请求汇率。
我可以优化此行为(每天或会话阅读一次)吗?
可能存储全局变量并检查更新日期?
答案 0 :(得分:3)
您要查找的关键字是 Caching 。
在您的情况下,我们的想法是只在更新时获取汇率。例如,如果您的脚本是fetching the Exchange Rates from the ECB,则费率会每天更改(大约1400 CET)。没有必要每天多次获取它们。
我能想到的构建缓存的最简单的自定义实现是存储来自Forex调用的结果并将结果序列化到文件。然后,当第二次调用服务时,检查文件的上次修改时间。如果它比例如年龄大,例如24小时,将呼叫发送到外部站点并替换该文件。如果没有,请反序列化内容,而不是调用外部站点。
由于缓存是一个常见的概念,因此可以选择许多实现,例如APC,memcached和抽象层,如Zend_Cache,PEAR的Cache或{ {3}}。 Smarty也可以使用您的外汇服务缓存任何模板,但个人CacheLite。
另见相关问题:
答案 1 :(得分:1)
将结果存储在数据库中,根据需要随时调用cron作业中的脚本..每天,每小时,任何让你开心的事。
答案 2 :(得分:1)
所有变量都以脚本(全局或本地)消亡,不能用于缓存目的。
根据您的资源,您有多种解决方案:
您可以选择汇率serialize作为字符串并将其存储到文件中。当您需要打印它们时,请阅读file modification time;如果它早于X,则从外部服务器获取新数据,否则unserialize显示当前数据并显示它。
当然,您可以将原始数据存储在适当的SQL数据库中并定期更新。
答案 3 :(得分:0)