在哪里以及如何存储货币汇率?

3
我已经编写了一个脚本,每个小时获取PayPal相对于美元的当前汇率(默认为我的产品货币)。用户可以在设置中设置他们的货币,并将其存储在用户表中。最初的想法是将所有货币汇率存储在数据库中,然后当用户登录时,在他们的会话中存储货币代码和汇率。然后在每个价格周围,我有一个函数,将价格乘以用户的汇率,并在末尾添加货币代码。我唯一担心的是,会话变量可能存在一段时间,可能会使价格完全错误。与其在会话中存储汇率,不如只存储他们的货币代码,并在内存表或文件系统上存储汇率以进行快速访问,并使价格转换函数访问它?这样价格就会像汇率一样及时更新。通常如何实现这一点呢?
4个回答

7

你是否可以将价格显示为它们所定价的货币,并在用户选择的货币中显示一个大致的价格,同时注明实际汇率可能会在结账时发生变化?


是的,我已经考虑过了。我也可以保持简单...如果汇率每天更新一次,那也不会有太大关系。 - Mark
我确实在我浏览过的一些在线商店看到过这种方法,所以有先例。 - Rowland Shaw
这就是eBay的做法,例如。 - Wally Lawless
1
即使您拥有最新的汇率,用户也会被其银行收取费用,而这个费率很可能与您的费率不同。这只是一个指南,所以不必过于担心。 - nickf

2

只需缓存从PayPal获取汇率的调用即可。这就是所要做的全部。只要缓存不过期,您的用户将使用缓存值进行计算。如果缓存过期,将获取新的汇率,例如(伪代码

$currency = 'usd';
if (!$cache->has("exRate-$currency")) {
    $exRate = ForEx::find($currency);
    $cache->save("exRate-$currency");
} else {
    $exRate = $cache->get("exRate-$currency");
}
CurrencyConverter::setRate($currency, $exRate);
CurrencyConverter::convert(100, 'eur', 'usd');

对于缓存,请使用APCmemcached


谢谢您的输入。我认为这是一个好的解决方案。目前我还没有实现缓存...当我实现时,我会回头看这个解决方案。 - Mark

0

你可以更改会话的默认生命周期 - 它存储在 php.ini 变量 session.gc_maxlifetime 中。默认值为 1440 (24 小时),此后会话将被以下垃圾回收清除。

该变量可以直接在文件中编辑或使用 ini_set 进行编辑:

ini_set('session.gc_maxlifetime', 60); // set to 1 hour

编辑

您可以使用变量session.gc_probabilitysession.gc_divisor来增加垃圾回收在任何给定调用中运行的概率。文档位于http://www.php.net/manual/zh/session.configuration.php


0

让我们来玩Jeopardy游戏。

是否可以使用 $_SERVER 作为类似于 ASP 的 Application 对象的应用程序全局对象?如果不行,PHP 中是否有应用程序对象?

如果是这样,你可以在 $_SERVER 中存储货币汇率,然后在必要时更新它(例如当 PayPal 更新其货币汇率时)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接