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

If you find this script useful then please consider making a donation to the developer

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