• 11-01-2016, 20:26:30
    #1
    Doviz kuru çekimi yapıyorum. Localde çalışırken sunucuda çalışmıyor sizce neden olabilir?

    Alıntı
    Warning: Illegal string offset 'isim' in /home/public_html/doviz-sistem/index.php on line 19
    Döviz Türü : D

    Warning: Illegal string offset 'ForexSelling' in /home/public_html/doviz-sistem/index.php on line 21
    Satış : D

    Warning: Illegal string offset 'ForexBuying' in /home/public_html/doviz-sistem/index.php on line 23
    Alış : D

    <?php
    include "doviz.php";
    $doviz = new Doviz();
    
    echo 'Döviz Türü : '.$doviz->get('USD')['Isim'];
    echo '<br>';
    echo 'Satış : '.$doviz->get('USD')['ForexSelling'];
    echo '<br>';
    echo 'Alış : '.$doviz->get('USD')['ForexBuying'];
    
    //Capraz
    //Capraz echo $doviz->getCrossRate('EUR')['rate']; 
    ?>
    <?php
    
    class Doviz {
    
    private $page, $currencies;
    
    
    public function __construct(){
        
        $this->page = new DOMDocument;
        $this->page->loadXML($this->getXML());
    
        $this->currencies = array();
        $this->initCurrencies();
    
        return $this;
        
    }
    
    private function getXML(){
    
        $xmlURL = 'http://www.tcmb.gov.tr/kurlar/today.xml';
    
        if(function_exists('curl_version')){
            $ch = curl_init();
    
            curl_setopt_array($ch, 
                array(
                    CURLOPT_RETURNTRANSFER => 1,
                    CURLOPT_URL    => $xmlURL
                )
            );
    
            $xmlPage = curl_exec($ch);
            curl_close($ch);
        }
        else{
            $xmlPage = file_get_contents($xmlURL);
        }
    
        return $xmlPage;
        
    }
    
    private function initCurrencies(){
    
        foreach($this->page->getElementsByTagName('Currency') as $currency){
    
            $currencyCode = $currency->getAttribute('CurrencyCode');
    
            $this->currencies[$currencyCode] = $this->getCurrencyData($currency, $currencyCode);
    
        }
    
    }
    
    private function getCurrencyData(DOMNode $currency, $currencyCode){
    
        $currencyData = array('CurrencyCode' => $currencyCode);
    
        foreach($currency->childNodes as $node){
    
            $currencyData[$node->nodeName] = $node->nodeValue;
    
        }
    
        $currencyData['crossRate'] = $this->getCrossRateData($currencyCode, 
                $currencyData['CrossRateUSD'], $currencyData['CrossRateOther']);
    
        return $currencyData;
    
    }
    
    private function getCrossRateData($currencyCode, $crossRateUSD, $crossRateOther){
    
        $crossRateType = empty($crossRateUSD) ? 
                        $currencyCode.'/USD' : 'USD/'.$currencyCode;
    
        $crossRate = empty($crossRateUSD) ? $crossRateOther : $crossRateUSD;
    
        return array('type' => $crossRateType, 'rate' => $crossRate);
    
    }
    
    public function getAll(){
        return $this->currencies;
    }
    
    public function get($currencyCode){
        return $this->currencies[$currencyCode] ?: 'Döviz yok.';
    }
    
    public function getAllCrossRates(){
        return array_map(function($currency){
            return $currency['crossRate'];
        }, $this->currencies);
    }
    
    public function getCrossRate($currencyCode){
        return $this->currencies[$currencyCode]['crossRate'];
    }
    
    }
    ?>
  • 12-01-2016, 22:32:28
    #2
    @nurettin;

    öncelikle hatayı php sürümü farklı olduğu için alıyorsunuz.

    Şöyle açıklayayım. Örneğin Php 5.4 de fonksiyondan geriye dizi, obje döndürüyoruz ve aşağıdaki şekilde kullanabiliyoruz.
    function diziDondur(){
    
     $dizi = array('id' => '2' , 'cevap' => 'olumlu');
    return $dizi;
    
    }
    
    // şu şekilde kullanabiliriz.
    $cevap = diziDondur()['cevap'];    // değişkene olumlu değeri atanacaktır.
    Ancak bu php nin eski versiyonlarında ( <= 5.3) hataya sebep olacaktır. bu şekildeki yerleri bulup aşağıdaki hale çevirirseniz sorun gider.

    // fonksiyondan dönen değeri bi değişkene atadık
    $cevap = diziDondur();
    
    // Değişken üzerinden işlem yaptık
    $cevap = $cevap['cevap'];  // Olumlu değeri değişkene aktarılacaktır.


    // EDİT -- Projenizdeki Kodları Uyarlardım.

    $dovizDegeri = $doviz->get('USD');
    
    echo 'Döviz Türü : ' .$dovizDegeri['Isim']; 
    echo '<br>'; 
    echo 'Satış : '.$dovizDegeri['ForexSelling']; 
    echo '<br>'; 
    echo 'Alış : '.$dovizDegeri['ForexBuying'];
    Kolay gelsin.