» Utilizator
Salut, vizitatorule!

SkullBox este o comunitate formata din programatori si administratori de sisteme sau retele care iti sta la dispozitie cand ai o problema legata de calculatoare. Daca esti un utilizator existent, autentifica-te.

Daca nu te-ai inregistrat inca pe forum, alatura-te noua astfel marind comunitatea si ajutandu-i pe cei care au nevoie de informatii.

Daca te-ai inregistrat dar inca nu ai primit codul de activare, il poti cere aici.




Autentifica-te cu numele de utilizator si parola pentru a putea posta pe forum sau pentru a accesa ariile disponibile doar utilizatorilor inregistrati.
» Promovam
» Parteneri » Statistici
  • 59752 de mesaje.
  • 7151 de topicuri.
  • 1016 de utilizatori.
  •  
  • Miller0297 e ultimul utilizator inregistrat.
[Detalii]

 
Pagini: 1 [2] 3
Print
Curs BNR cu PHP, varianta XML, folosind SimpleXML [4076 afisari]
detective
*


Mesaje: 130
OfflineOffline


Am reusit, ms mult
Logged
16-06-2008, 01:35 Twitt ::
johnake



Mesaje: 8
OfflineOffline


Hmm... mi se pare mie sau nu face fata BNR'ul?

Code:
[30-Sep-2008 12:22:33] PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/site/public_html/stoc/curs_valutar.php:31
Stack trace:
#0 /home/site/public_html/stoc/curs_valutar.php(31): SimpleXMLElement->__construct('')
#1 /home/site/public_html/stoc/index.php(411): include('/home/mediamax/...')
#2 {main}
  thrown in /home/site/public_html/stoc/curs_valutar.php on line 31
Linia 31 fiind:
Code:
$xml = new SimpleXMLElement($curs);
Daca inteleg bine, nu citeste fisierul XML, corect?
Logged
30-09-2008, 11:13 Twitt ::
Agkelos
*


Mesaje: 6708
OfflineOffline

WWW

Nu e interpretat corect XML-ul. Eu folosesc acelasi script pe un site personal si se updateaza corect, deci tind sa cred ca e o problema locala. Poti face un test cu un alt XML sa vezi daca e interpretat corect?  Eventual ia cu CURL un alt fisier si vezi daca reuseste sa il copieze corect.
Logged

SkullBox Blogger | LAMP Blogger | Web aggregator

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
30-09-2008, 11:23 Twitt ::
johnake



Mesaje: 8
OfflineOffline


Am incercat cu "$url = 'http://www.mozilla.org/projects/xslt/test.xml';"
Nici o eroare in error_log.
Problema este de cateva zile, ci nu de la data originala de instalare a scriptului, modificari mari nu am facut la script, decat echo la array-urile care ma intereseaza. E ciudat.
Logged
30-09-2008, 11:39 Twitt ::
Agkelos
*


Mesaje: 6708
OfflineOffline

WWW

Ai putea sa postezi codul exact asa cum il folosesti? Sa fac un test sa vad ce se intampla.
Logged

SkullBox Blogger | LAMP Blogger | Web aggregator

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
30-09-2008, 12:07 Twitt ::
johnake



Mesaje: 8
OfflineOffline


Code:
<?php

/* Author: Agkelos
 &nbsp; Link: http://www.skullbox.info/curs-bnr-cu-php-varianta-xml-folosind-simplexml-t3106.html
*/


// Trebuie sa iau XML-ul de pe bnr.ro si sa-l salvez in $curs;
$url &nbsp;= 'http://www.bnro.ro/nbrfxrates.xml';
//$url = 'http://www.mozilla.org/projects/xslt/test.xml';
// Daca exista CURL, folosim CURL. Daca nu, folosim file_get_contents();
if( function_exists('curl_init') ) {
 &nbsp; &nbsp;$curl_handle=curl_init();
 &nbsp; &nbsp;curl_setopt($curl_handle,CURLOPT_URL,$url);
 &nbsp; &nbsp;curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
 &nbsp; &nbsp;curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
 &nbsp; &nbsp;$curs = curl_exec($curl_handle);
 &nbsp; &nbsp;curl_close($curl_handle);
} else {
 &nbsp; &nbsp;$curs = file_get_contents($url);
 &nbsp; &nbsp;die(htmlspecialchars($curs));
}

// OK, avem fisierul nbrfxrates.xml. Acum trebuie sa il citim
// pentru asta avem nevoie de SimpleXML

if( !class_exists('SimpleXMLElement') ){
 &nbsp; &nbsp;// Daca nu suporta SimpleXML e naspa
 &nbsp; &nbsp;// Nu extind ca nu am chef sa ma complic inutil
 &nbsp; &nbsp;// Oricine vrea sa ma completeze e binevenit :-)
 &nbsp; &nbsp;echo 'Serverul nu suporta SimpleXML';
 &nbsp; &nbsp;exit;
}

// Daca am ajuns pana aici toate-s bune si ne putem pune pe treaba :-)
$rates = array();

$xml = new SimpleXMLElement($curs);
foreach( $xml->Body->Cube->Rate as $rate ){
 &nbsp; &nbsp;$final = array();
 &nbsp; &nbsp;foreach( $rate->attributes() as $att => $value ){
 &nbsp; &nbsp; &nbsp; &nbsp;if( strcmp($att,'currency') == 0 ) &nbsp; $final['currency'] &nbsp; = (string) $value;
 &nbsp; &nbsp; &nbsp; &nbsp;if( strcmp($att,'multiplier') == 0 ) $final['multiplier'] = (string) $value;
 &nbsp; &nbsp;}
 &nbsp; &nbsp;$final['rate'] = (string) $rate;
 &nbsp; &nbsp;if( empty($final['multiplier']) ) $final['multiplier'] = 1;
 &nbsp; &nbsp;array_push($rates,$final);
}

// Daca am ajuns aici, datele sunt pastrate in $rates

echo '<div style="height:120px;width:250px;overflow:auto;margin:5px; background-image: url(images/curs.jpg); border:1px solid #000000;" align="center">';



echo "<table>";

echo "<tr><td colspan=2 align=center><b>Curs valutar BNR
 ".$today = date("d.m.Y")."<br/><br/></td></tr></b>";

echo "<tr><td>USD: </td><td>".$rates[18]["rate"]."</td><td>RON</td></tr>";
 &nbsp;
echo "<tr><td>Euro: </td><td>".$rates[7]["rate"]."</td><td>RON</td></tr></table></div>";

$dolar = $rates[18]["rate"];
$euro = $rates[7]["rate"];
?>
Mersi. Sa nu iei in seama linia die(htmlspecialchars($curs)); am vrut sa testez ceva.
LE: Cred ca o sa incerc sa fac un script ceva mai simplu, care sa-mi copieze content-ul xml'ului cu fwrite, scriptul sa citeasca xml'ul local iar la un anume interval sa-si actualizeze continutul. Smile
Logged
30-09-2008, 12:14 Twitt ::
Agkelos
*


Mesaje: 6708
OfflineOffline

WWW

Mai, mie imi merge perfect. Nu mai ai ceva pe acolo care ar putea afecta?
Logged

SkullBox Blogger | LAMP Blogger | Web aggregator

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
30-09-2008, 13:34 Twitt ::
johnake



Mesaje: 8
OfflineOffline


Salut,
Imi cer scuze pentru raspunsul intarziat, nu am reusit sa-i dau de cap. Intr-un final am folosit:
Code:
<?php
if (time()-filemtime("nbrfxrates.xml") > 3600) {
    $file = file("http://www.bnro.ro/nbrfxrates.xml");
    $fopen = fopen("nbrfxrates.xml","w");
    foreach ($file as $line) {
      fputs($fopen,$line);
      }
      fclose ($fopen);
      $xld = "loaded afresh (and not cached)";
    } else {

    $file = file("nbrfxrates.xml");
    $xld = "cached (and not loaded afresh)";
    }


$rate[RON] = 1.00;
foreach ($file as $line) {
  ereg("currency='([[:alpha:]]+)'",$line,$gota);
  if (ereg(">([[:graph:]]+)<",$line,$gotb)) {
    $rate[$gota[1]] = $gotb[1];
  }
}

$RON = round(1 / $rate[RON], 8);
$EURO = round($RON * $rate[EUR], 8);
$USD = round($RON * $rate[USD], 8);
$GBP = round($RON * $rate[GBP], 8);


echo '<div style="height:120px;width:250px;overflow:auto;margin:5px; background-image: url(images/curs.jpg); border:1px solid #000000;" align="center">';

echo "<table>";

echo "<tr><td colspan=3 align=center><b>Curs valutar BNR<br> ".$today = date("d.m.Y")."<br/><br/></td></tr></b>";
echo "<tr><td><img src=usd.gif></td><td><b>USD:</b> </td><td><b>".$USD."</b></td><td><b>RON</b></td></tr>";
echo "<tr><td><img src=eur.gif></td><td><b>EURO:</b> </td><td><b>".$EURO."</b></td><td><b>RON</b></td></tr></table></div>";

?>

Offtopic: De ce la code tags cand folosesc php short-tags nu-mi face highlight la cod? Tongue
Logged
06-10-2008, 13:21 Twitt ::
Agkelos
*


Mesaje: 6708
OfflineOffline

WWW

Ar fi trebuit sa iti functioneze si varianta care ai postat-o inainte. Anyway, bine ca te-ai descurcat intr-un final Tongue

Offtopic: De ce la code tags cand folosesc php short-tags nu-mi face highlight la cod? Tongue
Pentru ca short-tags e obsolete si e descurajata utilizarea inca din PHP4 Tongue
Logged

SkullBox Blogger | LAMP Blogger | Web aggregator

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
06-10-2008, 13:23 Twitt ::
Y2K
*


Mesaje: 214
OfflineOffline

WWW

eu am modifcat putin codul sa imi dea si in alte monezii ...


Code:
<?php
if (time()-filemtime("nbrfxrates.xml") > 3600) {
    $file = file("http://www.bnro.ro/nbrfxrates.xml");
    $fopen = fopen("nbrfxrates.xml","w");
    foreach ($file as $line) {
      fputs($fopen,$line);
      }
      fclose ($fopen);
      $xld = "loaded afresh (and not cached)";
    } else {

    $file = file("nbrfxrates.xml");
    $xld = "cached (and not loaded afresh)";
    }


$rate[RON] = 1.00;
foreach ($file as $line) {
  ereg("currency='([[:alpha:]]+)'",$line,$gota);
  if (ereg(">([[:graph:]]+)<",$line,$gotb)) {
    $rate[$gota[1]] = $gotb[1];
  }
}

$RON = round(1 / $rate[RON], 8);
$EURO = round($RON * $rate[EUR], 8);
$USD = round($RON * $rate[USD], 8);
$GBP = round($RON * $rate[GBP], 8);
$CHF = round($RON * $rate[CHF], 8);
$HUF = round($RON * $rate[HUF], 8);


echo '<div style="height:170px;width:200px;overflow:auto;margin:5px; border:1px solid #000000;" align="center">';

echo "<table>";

echo "<tr><td colspan=3 align=center><b><center>Curs valutar BNR<br> ".$today = date("d.m.Y")."<br/><br/></td></tr></b></center>";
echo "<tr><td></td><td><b>EURO:</b> </td><td><b>".$EURO."</b></td><td><b>RON</b></td></tr>";
echo "<tr><td></td><td><b>USD:</b> </td><td><b>".$USD."</b></td><td><b>RON</b></td></tr>";
echo "<tr><td></td><td><b>CHF:</b> </td><td><b>".$CHF."</b></td><td><b>RON</b></td></tr>";
echo "<tr><td></td><td><b>100HUF:</b> </td><td><b>".$HUF."</b></td><td><b>RON</b></td></tr></table></div>";

?>


iar la rulare imi zice :


Quote
Warning: filemtime() [function.filemtime]: stat failed for nbrfxrates.xml in /home/XXXXX/public_html/aaa.php on line 2

Warning: fopen(nbrfxrates.xml) [function.fopen]: failed to open stream: Permission denied in /home/XXXXX/public_html/aaa.php on line 4

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXXpublic_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXXpublic_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXXpublic_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fputs(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 6

Warning: fclose(): supplied argument is not a valid stream resource in /home/XXXXX/public_html/aaa.php on line 8
Curs valutar BNR
06.12.2008

   EURO:    3.8545   RON
   USD:    3.021   RON
   CHF:    2.5112   RON
   100HUF:    1.4661   RON

cum sa fac sa scap de eroare asta ?  Broken heart
Logged
05-12-2008, 23:35 Twitt ::
astan
*


Mesaje: 737
OfflineOffline


Probabil ca fisierul nbrfxrates.xml nu exista unde te astepti tu sa fie sau nu ai drepturi pe el.
Logged
06-12-2008, 00:51 Twitt ::
Agkelos
*


Mesaje: 6708
OfflineOffline

WWW

Cel mai probabil nu exista fisierul nbrfxrates.xml asta fiind si motivul pentru care da eroare la fputs().

Tu ce incerci sa faci? Banuiesc ca downloadezi fisierul inainte sa il folosesti... nu?
Logged

SkullBox Blogger | LAMP Blogger | Web aggregator

De nu va zice omul intru inima sa "Eu singur si Dumnezeu suntem in lume" nu va avea odihna. - Avva Alonie
06-12-2008, 01:09 Twitt ::
Y2K
*


Mesaje: 214
OfflineOffline

WWW

fisierul exista ....
Quote
This XML file does not appear to have any style information associated with it. The document tree is shown below.
     

<DataSet xsi:schemaLocation="http://www.bnr.ro/xsd nbrfxrates.xsd">

<Header>
<Sender>National Bank of Romania</Sender>
<SendingDate>2008-12-05</SendingDate>
<MessageType>DR</MessageType>
</Header>

<Body>
<Subject>Reference rates</Subject>
<OrigCurrency>RON</OrigCurrency>

<Cube date="2008-12-05">
<Rate currency="AUD">1.9479</Rate>
<Rate currency="BGN">1.9708</Rate>
<Rate currency="CAD">2.3700</Rate>
<Rate currency="CHF">2.5112</Rate>
<Rate currency="CZK">0.1502</Rate>
<Rate currency="DKK">0.5174</Rate>
<Rate currency="EGP">0.5469</Rate>
<Rate currency="EUR">3.8545</Rate>
<Rate currency="GBP">4.4277</Rate>
<Rate currency="HUF" multiplier="100">1.4661</Rate>
<Rate currency="JPY" multiplier="100">3.2755</Rate>
<Rate currency="MDL">0.2933</Rate>
<Rate currency="NOK">0.4216</Rate>
<Rate currency="PLN">0.9938</Rate>
<Rate currency="RUB">0.1076</Rate>
<Rate currency="SEK">0.3643</Rate>
<Rate currency="SKK">0.1277</Rate>
<Rate currency="TRY">1.9273</Rate>
<Rate currency="USD">3.0210</Rate>
<Rate currency="XAU">74.9053</Rate>
<Rate currency="XDR">4.5187</Rate>
</Cube>
</Body>
</DataSet>


am luoat codul postat mai sus de johnake si am introdus alte valori ca pe ala am priceput si eu ceva Winking
Logged
06-12-2008, 06:44 Twitt ::
johnake



Mesaje: 8
OfflineOffline


Scriptul ala practic iti face o "oglinda" a fisierului xml pe server-ul tau si il citeste de-acolo. Am zis ca este mult mai practic asa... De mesajele alea de eroare poti scapa foarte usor cu un error control operator cum ar fi '@' (adica pui un @ in fata fiecarei functii care genereaza erorile), dar totusi eu cred ca problema e din server-ul tau si nu as recomanda aceasta solutie. Am incercat si pe un localhost, intr-adevar la prima executie da un warning: Warning: filemtime() [function.filemtime]: stat failed for nbrfxrates.xml in xxx on line 4, insa la un refresh dispare. Warning-ul e logic deoarece se face o operatiune matematica intre timpul curent si data ultimei modificari a continutului fisierului, fara ca acesta sa fie creat in prealabil.
Logged
16-12-2008, 13:02 Twitt ::
johnake



Mesaje: 8
OfflineOffline


sorry de bump, dar se pare ca au schimbat astia structura xml-ului. O sa revin mai tarziu cu o solutie.
Logged
09-03-2009, 14:20 Twitt ::
Reclama
VIP

Hosting

Mesaje: 25.90
OnlineOnline

WWW
 

   Pe ABCDomenii: 250MB spatiu + 20GB trafic + 5 subdomenii = 0.95 €
 
 

The problem with troubleshooting is that trouble shoots back.
Azi 
Pages: 1 [2] 3
Print
SkullBox Forum  |  Development  |  Web Development  |  PHP Snippets (Moderator: payne)  |  Topic: Curs BNR cu PHP, varianta XML, folosind SimpleXML
Jump to: