PHP Currency Conversion – Exchange Rates XML
With this script you can freely convert between 36 different currencies from
around the world. The script uses exchange rates downloaded from the European
Central Bank via an xml file located at www.ecb.int/stats/eurofxref/eurofxref-daily.xml. The rates are then stored in your own MySQL database for use and then updated daily.
Example: £2.50 = $4.03
The code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | <?php /* * File: CurrencyConverter.php * Author: Simon Jarvis * Copyright: 2005 Simon Jarvis * Date: 10/12/05 * Link: http://www.white-hat-web-design.co.uk/articles/php-currency-conversion.php * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details: * http://www.gnu.org/licenses/gpl.html * */ class CurrencyConverter { var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml"; var $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_table; var $exchange_rates = array(); //Load Currency Rates function CurrencyConverter($host,$user,$pass,$db,$tb) { $this->mysql_host = $host; $this->mysql_user = $user; $this->mysql_pass = $pass; $this->mysql_db = $db; $this->mysql_table = $tb; $this->checkLastUpdated(); $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); $rs = mysql_select_db($this->mysql_db,$conn); $sql = "SELECT * FROM ".$this->mysql_table; $rs = mysql_query($sql,$conn); while($row = mysql_fetch_array($rs)) { $this->exchange_rates[$row['currency']] = $row['rate']; } } /* Perform the actual conversion, defaults to £1.00 GBP to USD */ function convert($amount=1,$from="GBP",$to="USD",$decimals=2) { return(number_format(($amount/$this->exchange_rates[$from])*$this->exchange_rates[$to],$decimals)); } /* Check to see how long since the data was last updated */ function checkLastUpdated() { $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); $rs = mysql_select_db($this->mysql_db,$conn); $sql = "SHOW TABLE STATUS FROM ".$this->mysql_db." LIKE '".$this->mysql_table."'"; $rs = mysql_query($sql,$conn); if(mysql_num_rows($rs) == 0 ) { $this->createTable(); } else { $row = mysql_fetch_array($rs); if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) { $this->downloadExchangeRates(); } } } /* Download xml file, extract exchange rates and store values in database */ function downloadExchangeRates() { $currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/")); $currency_file = substr($this->xml_file,strpos($this->xml_file,"/")); $fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10); if($fp) { $out = "GET ".$currency_file." HTTP/1.1\r\n"; $out .= "Host: ".$currency_domain."\r\n"; $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { $buffer .= fgets($fp, 128); } fclose($fp); $pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is"; preg_match_all($pattern,$buffer,$xml_rates); array_shift($xml_rates); for($i=0;$i<count($xml_rates[0]);$i++) { $exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i]; } $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); $rs = mysql_select_db($this->mysql_db,$conn); foreach($exchange_rate as $currency=>$rate) { if((is_numeric($rate)) && ($rate != 0)) { $sql = "SELECT * FROM ".$this->mysql_table." WHERE currency='".$currency."'"; $rs = mysql_query($sql,$conn) or die(mysql_error()); if(mysql_num_rows($rs) > 0) { $sql = "UPDATE ".$this->mysql_table." SET rate=".$rate." WHERE currency='".$currency."'"; } else { $sql = "INSERT INTO ".$this->mysql_table." VALUES('".$currency."',".$rate.")"; } $rs = mysql_query($sql,$conn) or die(mysql_error()); } } } } /* Create the currency exchange table */ function createTable() { $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass); $rs = mysql_select_db($this->mysql_db,$conn); $sql = "CREATE TABLE ".$this->mysql_table." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM"; $rs = mysql_query($sql,$conn) or die(mysql_error()); $sql = "INSERT INTO ".$this->mysql_table." VALUES('EUR',1)"; $rs = mysql_query($sql,$conn) or die(mysql_error()); $this->downloadExchangeRates(); } } ?> |
Usage
Copy the above code into a new file and save it as CurrencyConverter.php. Whenever you need to make a conversion just include the class file and call the ‘convert’ function. You will need to enter your own mysql database variables such as the login details. The example below will convert £2.50 GBP into US Dollars ($).
1 2 3 4 5 | <?php include('CurrencyConverter.php'); $x = new CurrencyConverter('your_host','your_username','your_password','your_database_name','your_table_name'); echo $x->convert(2.50,'GBP','USD'); ?> |
If the table doesn’t already exist then it will be created by the script.
If you have any problems using this script please email us.
Currency Codes
British Pounds = GBP, US Dollars = USD, Euros = EUR, Australian Dollars = AUD, Bulgarian Leva = BGN, Canadian Dollars = CAD, Swiss Francs = CHF, Chinese Yuan Renminbi = CNY, Cyprian Pounds = CYP, Czech Koruny = CZK, Danish Kroner = DKK, Estonian Krooni = EEK, Hong Kong, Dollars = HKD, Croatian Kuna = HRK, Hungarian Forint = HUF, Indonesian Rupiahs = IDR, Icelandic Kronur = ISK, Japanese Yen = JPY, South Korean Won = KRW, Lithuanian Litai = LTL, Latvian Lati = LVL, Malta Liri = MTL, Malaysian Ringgits = MYR, Norwegian Krone = NOK, New Zealand Dollars = NZD, Philippine Pesos = PHP, Polish Zlotych = PLN, Romanian New Lei = RON, Russian Rubles = RUB, Swedish Kronor = SEK, Singapore Dollars = SGD, Slovenian Tolars = SIT, Slovakian Koruny = SKK, Thai Baht = THB, Turkish New Lira = TRY, South African Rand = ZAR
Posted by admin on Sunday, October 10th, 2010



