[英]Where and how to store currency rates?
我寫了一個腳本,每小時(當我的產品默認使用的貨幣)與每小時相比,獲得paypals當前費率。
用戶可以在其設置中設置其貨幣並存儲在用戶表中。
我最初的想法是將所有貨幣匯率存儲在數據庫中,然后在用戶登錄時將貨幣代碼和匯率存儲在會話中。 然后在每個價格附近,我有一個函數,它將價格乘以用戶價格,並在最后附加貨幣代碼。
我唯一擔心的是會話變量可能存在一段時間,並可能使價格完全錯誤。
我應該只存儲他們的貨幣代碼並將費率存儲在內存表或文件系統中以便快速訪問,並讓價格轉換功能訪問它,而不是將費率存儲在會話中嗎? 因此價格與費率一樣最新。
這通常是如何實現的?
您是否可以用他們定價的貨幣顯示價格,並顯示用戶所選貨幣的近似價格,但需要注意的是實際匯率可能會在結賬時有所不同?
只需緩存從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');
您可以更改會話的默認生存期 - 它存儲在php.ini變量session.gc_maxlifetime
。 默認值為1440(24小時),之后將通過以下垃圾回收清除會話。
變量可以直接編輯(在文件中)或使用ini_set
:
ini_set('session.gc_maxlifetime', 60); // set to 1 hour
編輯
您可以使用變量session.gc_probability
和session.gc_divisor
增加在任何給定調用上運行垃圾收集的概率。 文檔位於http://www.php.net/manual/en/session.configuration.php
讓我們做危險的事情。
是否可以將$ _SERVER用作應用程序范圍的全局對象,類似於ASP的Application對象? 如果沒有,是否有PHP應用程序對象?
如果是這樣,您可以將貨幣匯率存儲在$ _SERVER中,然后在必要時更新(例如,當Paypal更新其匯率時)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.