było wielokrotnie - potrzebuje zczytać kursy NBP - ale jak nad tym siedze to niestety niedziała mi i nie wiem dlaczego - używam tego skryptu:
<?php
/**
* Pobieranie kursów walut z NBP
*
* Klasa do obsługi plików xml z kursami walut udostępnianych przez NBP
*
* @author Bartłomiej Staniszczak <b_staniszczak at tlen dot pl>
* @copyright 2007 Bartłomiej Staniszczak
* @version 1.0
*
*/
class WalutyNBP {
/**
* Tablica z wszystkimi kursami zczytanymi z XML
*
* @var array
*/
private $arrKursy = array();
/**
* Zmienna zawierająca datę aktualizacji kursów
*
* @var string
*/
private $strData;
/**
* Konstruktor parsuje xml'a do tablicy
*
* @param string $strEncoding
* @param string $strUrlXml
*/
public function __construct($strEncoding='UTF-8',$strUrlXml='http://www.nbp.pl/kursy/xml/'){
$strUrlXml=$strUrlXml.$this->aktualny_xml().'.xml';
$objXml = new XMLReader();
if(function_exists('curl_init')){
$objXml->XML($this->ccurl_fopen($strUrlXml));
}
else{
$objXml->open($strUrlXml);
}
$j=0;
while($objXml->read()){
if($objXml->name === 'data_publikacji' && $objXml->nodeType==1){
$objXml->read();
$this->strData=$objXml->value;
}
if($objXml->depth==3){
if($j==4){
$j=0;
$this -> arrKursy[$arrWaluta[2]]=$arrWaluta;
}
if($strEncoding!='ISO-8859-2'){
$arrWaluta[$j]=iconv('ISO-8859-2',$strEncoding,$objXml->value);
}
else{
$arrWaluta[$j]=$objXml->value;
}
$j++;
}
}
}
/**
* Otwieranie pliku
*
* Metoda otwiera plik i zwraca jego zawartość
*
* @param string $strUrl
* @return mixed
*/
private function ccurl_fopen ($strUrl){
$strUser_agent = "Mozilla/8.0 (Windows 2008 SP32 + 3patch)";
$resCh = curl_init();
curl_setopt ($resCh, CURLOPT_URL, $strUrl);
curl_setopt ($resCh, CURLOPT_USERAGENT, $strUser_agent);
curl_setopt ($resCh, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt ($resCh, CURLOPT_HEADER, 0);
curl_setopt ($resCh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($resCh, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($resCh, CURLOPT_TIMEOUT, 120);
$mixResult = curl_exec ($resCh);
curl_close($resCh);
return $mixResult;
}
/**
* Aktualna nazwa pliku XML z danymi
*
* @param string $strTabela
* @return string
*/
private function aktualny_xml($strTabela='a'){
if(function_exists('curl_init')){
$resLista = $this->ccurl_fopen('http://www.nbp.pl/kursy/xml/dir.txt');
$arrPlikiXML = explode("n",$resLista); }
elseif(!function_exists('fsockopen') || !function_exists('fputs') || !function_exists('feof') || !function_exists('fgets')){
$resPolalczenie = fsockopen ( "www.nbp.pl", 80
); $strHeaders = 'GET /Kursy/xml/dir.txt HTTP/1.0' . "rn";
$strHeaders .= 'Host: www.nbp.pl' . "rn";
$strHeaders .= 'User-Agent: Mozilla/8.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.7.10) Gecko/20050717 Firefox/1.0.6' . "rnrn";
fputs ( $resPolalczenie, $strHeaders ); while ( ! feof ( $resPolalczenie ) ) { $arrPlikiXML[] = fgets ( $resPolalczenie, 128
); }
}
for($i=0; $i<=3; $i++){
$strNazwa=trim($arrPlikiXML[$i]); if(substr($strNazwa,0
,1
)==$strTabela){ $strDzisiejszyXML=trim($arrPlikiXML[$i]); }
}
return $strDzisiejszyXML;
}
/**
* Zwraca wybrane waluty
*
* Metoda zwraca informacje o podanych w parametrze walutach
*
* @param mixed $mixWaluty
* @return array
*/
public function zwroc_waluty
($mixWaluty=array()){ return $this->arrKursy;
}
return $this->arrKursy[$mixWaluty];
return FALSE;
}
else{
foreach($this->arrKursy AS $strKlucz => $arrWartosc){
$arrWynikowa[$strKlucz]=$this->arrKursy[$strKlucz];
}
if(count($arrWynikowa)>0
) return $arrWynikowa;
return FALSE;
}
return FALSE;
}
/**
* Data aktualizacji kursów
*
* @return string
*/
public function getData(){
return $this->strData;
}
}
?>
<?php
$kursy = new WalutyNBP();
$waluta = $kursy -> zwroc_waluty
(array('USD','PLN','EUR')); echo $kursy->getData().'<br/>'; ?>
i wywala mi błąd:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /mounted-storage/XXX/XXX/xxx/katalog/test/kasa10.php on line 82
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /mounted-storage/XXX/XXX/xxx/katalog/test/kasa10.php on line 82
używałem też tego :
<?php
$tabela_kursow = simplexml_load_file('http://www.nbp.pl/kursy/xml/a125z070629.xml');
foreach($tabela_kursow->pozycja as $pozycja) {
echo 'nazwa waluty : ' ,$pozycja->nazwa_waluty.'<br />'; echo 'kod waluty : ' ,$pozycja->kod_waluty.'<br />'; echo 'kurs średni : ' , $pozycja->kurs_sredni.'<br />'; }
?>
to dziala ale chyba trzeba to co jakiś czas aktualizowac a mnie interesowałby automat;
wie ktoś może jak przerobić powyższe - lub co sie zmieniło że nie działa teraz ?