• 04-02-2022, 10:31:58
    #1
    Üyeliği durduruldu
    Merhaba,

    Buradaki sitede verileri cache'de tutmayla ilgili birkaç kod buldum. Siteye gitmek istemeyenler için kodu aşağı olduğu gibi ekledim.

    Buradaki kod işime yarıyor fakat burada $cikti adında bir değişken var. Bende birden çok değişken var. Bu kod çıktısında sadece $onbellek->cache('kurlar.txt') değişkeni ekrana basılıyor. Bunun içinde sadece $cikti içerisindeki fiyat var. Ben diğer değişkenlerimi de çıktılamak istiyorum. Birden fazla fiyat çekeceğim çünkü. Bunu nasıl yapabilirim? Buraya $cikti2 ve $cikti3 gibi 8 tane değişken ekleyeceğim ve her birini cache içinde tutup istediğim alanda ekrana yazdıracağım.

    PHP bilen arkadaşlar yardımcı olur ise sevinirim.

    Öğrenmek için bu tür konuları sık sık açıyorum. Daha önce böyle açılmış konular sayesinde çok şey öğreniliyor. Herkese teşekkür ederim.

    # önbellek süresi (saniye cinsinden)
    # ilk çalıştırmada 0 yapın!
    $cache_suresi           = 43200;
      
    class onbellek{
        public $dadi    = 'kurlar.txt';
        # eğer önbellek süresi doldu ise yapılacak işlemler. (Örn: Veritabanından şu veriyi çek)
        function veri(){
            $sayfa      = file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml');
            preg_match('~CurrencyCode="USD".*BanknoteSelling>([0-9.]+)</BanknoteSelling~isuU',$sayfa,$cikti);
            $kur        = $cikti[1];
              
            return ($kur);
        }
        function cache($dosyaadi=null){
            if(!@$dosyaadi)
                $dosyaadi   = $this->dadi;
            global $cache_suresi;
            if(filemtime($dosyaadi)+$cache_suresi<time()){ $veri = $this->veri();
     
                # eğer tcmb'den veri çekemezse, döviz kurunu güncelleme
                if((int)($veri)>0.1){
                    $dosya = fopen($dosyaadi, 'w');
                    fwrite($dosya, $veri);
                    fclose($dosya);
                    return $veri;
                } else
                    return $this->oku($dosyaadi);
                
            }else{
                return $this->oku($dosyaadi);
            }
        }
        function oku($dosyaadi){
            $dosya  = fopen($dosyaadi, 'r');
            $icerik = fread($dosya, filesize($dosyaadi));
            fclose($dosya);
            return $icerik;
        }
    }
     
    $onbellek      = new onbellek();
    # kurlar.txt dosyasının chmod ayarını 777 yapmayı unutmayın!
    echo $onbellek->cache('kurlar.txt');
  • 04-02-2022, 11:32:17
    #2
    Developer
    Txt içeriğini de ekler misiniz
  • 04-02-2022, 11:35:43
    #3
    Üyeliği durduruldu
    sadece çektiğim alandaki veri var hocam:

    12630 ₺ //bu şekilde

    brown adlı üyeden alıntı: mesajı görüntüle
    Txt içeriğini de ekler misiniz
  • 04-02-2022, 11:38:28
    #4
    Aynı dosya içerisinde yapmak yerine ayrı bir dosyada verileri çekip dosyaya kaydeden işlemi yapın. Daha sonra bu dosyayı Cron job ile belli bir süreye ayarlayin. Bu şekilde hiç bir yavaşlama da hissedilmez.
  • 04-02-2022, 11:40:42
    #5
    Üyeliği durduruldu
    profweb adlı üyeden alıntı: mesajı görüntüle
    Aynı dosya içerisinde yapmak yerine ayrı bir dosyada verileri çekip dosyaya kaydeden işlemi yapın. Daha sonra bu dosyayı Cron job ile belli bir süreye ayarlayin. Bu şekilde hiç bir yavaşlama da hissedilmez.
    her fiyatı farklı dosyaya mı yazdırayım? aslında bu sistemi 8 kere kopya etmek aklıma geldi ama bu işe olan saygımdan ötürü bunu yapmadım
    bunu nasıl yapabileceğimi gösteren bir kaynak gösterme şansınız var mı? ultra acemi olduğum için araştırarak ilerliyorum.
  • 04-02-2022, 11:43:20
    #6
    Halil0707 adlı üyeden alıntı: mesajı görüntüle
    her fiyatı farklı dosyaya mı yazdırayım? aslında bu sistemi 8 kere kopya etmek aklıma geldi ama bu işe olan saygımdan ötürü bunu yapmadım
    bunu nasıl yapabileceğimi gösteren bir kaynak gösterme şansınız var mı? ultra acemi olduğum için araştırarak ilerliyorum.
    Tabiki hayır, hepsini ["TL" => $tldegeri, "USD" => $usddegeri] gibi bir dizi içine alın. Daha sonra bu diziyi json_encode fonksiyonu ile JSON'a çevirin. Bu JSON'u dosyaya kaydedin.

    Verileri dosyadan alırken json_decode fonksiyonu ile veriyi diziye çevirin ve kullanın. Bu kadar.
  • 04-02-2022, 12:09:00
    #7
    Üyeliği durduruldu
    bilgiler için teşekkür ederim. bunlar üzerinde araştırma yapacağım.

    profweb adlı üyeden alıntı: mesajı görüntüle
    Tabiki hayır, hepsini ["TL" => $tldegeri, "USD" => $usddegeri] gibi bir dizi içine alın. Daha sonra bu diziyi json_encode fonksiyonu ile JSON'a çevirin. Bu JSON'u dosyaya kaydedin.

    Verileri dosyadan alırken json_decode fonksiyonu ile veriyi diziye çevirin ve kullanın. Bu kadar.
  • 04-02-2022, 12:21:19
    #8
    Developer
    şu şekilde de olabilir:

    <?php
    $cache_timeout = 43200;
    $file = 'today.xml';
    
    function getCurrency($x){
        global $cache_timeout;
        global $file;
        if(!file_exists($file)){
            file_put_contents($file, file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml'));    
        }
        if(filemtime($file)+$cache_timeout<time()){
            file_put_contents($file, file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml'));    
        }
        $get = file_get_contents($file);
        $xml=simplexml_load_string($get);
        return $xml->xpath('Currency[@CurrencyCode="'.$x.'"]')[0]->BanknoteSelling;
    }
    
    echo getCurrency('USD');
    
    ?>
  • 04-02-2022, 12:30:51
    #9
    Üyeliği durduruldu
    çok teşekkür ederim hocam bununla sonuç aldım.

    brown adlı üyeden alıntı: mesajı görüntüle
    şu şekilde de olabilir:

    <?php
    $cache_timeout = 43200;
    $file = 'today.xml';
    
    function getCurrency($x){
        global $cache_timeout;
        global $file;
        if(!file_exists($file)){
            file_put_contents($file, file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml'));    
        }
        if(filemtime($file)+$cache_timeout<time()){
            file_put_contents($file, file_get_contents('http://www.tcmb.gov.tr/kurlar/today.xml'));    
        }
        $get = file_get_contents($file);
        $xml=simplexml_load_string($get);
        return $xml->xpath('Currency[@CurrencyCode="'.$x.'"]')[0]->BanknoteSelling;
    }
    
    echo getCurrency('USD');
    
    ?>