// |
// | Currency convertor using data from the European Central Bank.
// +---------------------------------------------------------------------------
// enable debugging
ini_set('error_reporting', E_ALL);
ini_set('display_errors', TRUE);
// retrieve currencies
$currencies = currency_cache();
// test if user posted valid data
if (isset($_POST['submit'])
&& isset($_POST['src']) && array_key_exists($_POST['src'], $currencies)
&& isset($_POST['dst']) && array_key_exists($_POST['dst'], $currencies)
&& isset($_POST['amount']) && is_numeric($_POST['amount']))
{
$src = $_POST['src'];
$dst = $_POST['dst'];
$amount = $_POST['amount'];
// output conversion result
$result = currency_convert($currencies[$src], $currencies[$dst], $amount);
echo "$amount $src equals $result $dst
\n";
}
// - HTML Output --------------------------------------------------------------
?>
\n";
foreach($currencies as $currency => $rate)
{
$html .= "\n";
}
$html .= "\n";
return $html;
}
/**
* Cache currency list via session management
* @return an array with currency/rate pairs
*/
function currency_cache()
{
// start session
session_start();
// fetch currencies
if (isset($_SESSION['currencies']))
{
$currencies = $_SESSION['currencies'];
}
else
{
$currencies = currency_retrieve();
}
// save currencies
$_SESSION['currencies'] = $currencies;
return $currencies;
}
/**
* Convert amount of source currency rate into destination currency rate
* @param $srcrate the rate of the source currency
* @param $dstrate the rate of the destination currency
* @param $amount the amount
* @return the amount in the destination currency
*/
function currency_convert($srcrate, $dstrate, $amount)
{
$euros = $amount / $srcrate;
$result = $euros * $dstrate;
$result = round($result, 4);
return $result;
}
/**
* Retrieve Currencies from the European Central Bank
* @return an associative array with currency/rate pairs
*/
function currency_retrieve()
{
// retrieve data and parse it
$p = xml_parser_create();
$data = file_get_contents('http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml');
xml_parse_into_struct($p, $data, $vals, $index);
xml_parser_free($p);
// retrieve currencies
$currencies = array();
$currencies['EUR'] = '1.0000';
// iterate over all cube nodes
foreach($index['CUBE'] as $index)
{
$node = $vals[$index];
// test if rate and currency are available in the node
if (isset($node['attributes'])
&& isset($node['attributes']['RATE'])
&& isset($node['attributes']['CURRENCY']))
{
$currency = $node['attributes']['CURRENCY'];
$rate = $node['attributes']['RATE'];
$currencies[$currency] = $rate;
}
}
return $currencies;
}
?>