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

时间:2010-01-14 14:21:22

标签: php mysql paypal currency

我写了一个脚本,每小时(当我的产品默认使用的货币)与每小时相比,获得paypals当前费率。

用户可以在其设置中设置货币,并存储在用户表中。

我最初的想法是将所有货币汇率存储在数据库中,然后当用户登录时将货币代码和汇率存储在会话中。然后在每个价格附近,我有一个函数,它将价格乘以用户价格,并在最后附加货币代码。

我唯一担心的是会话变量可能存在一段时间,并可能使价格完全错误。

我应该只存储他们的货币代码并将费率存储在内存表或文件系统中以便快速访问并让价格转换功能访问它,而不是将费率存储在会话中吗?因此,价格与费率一样最新。

这通常如何实现?

4 个答案:

答案 0 :(得分:7)

您是否可以用他们定价的货币显示价格,并以用户选择的货币显示近似价格,但需要注意的是实际汇率可能会随着时间而变化结帐?

答案 1 :(得分: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

答案 2 :(得分: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/en/session.configuration.php

答案 3 :(得分:0)

让我们做危险的事情。

是否可以将$ _SERVER用作应用程序范围的全局对象,类似于ASP的Application对象?如果没有,是否有PHP应用程序对象?

如果是这样,您可以将货币汇率存储在$ _SERVER中,然后在必要时更新(例如,当Paypal更新货币汇率时)