Ajax nasıl okunur? MySQL kapanıyor !!!
Ağu 12

Bilindiği üzere hepimiz ihtiyacımız olduğunda döviz kurlarını TCMB sayfasından çekiyoruz. Ama bunu daha optimize etmenin yolunu düşünürken cron aklıma geldi ve

http://profcoder.net/kod/doviz.txt

yukarıdaki dosyayı saat başı değiştiren bir cron komutu ekledim hosta. Böylece her ziyaretçi geldiğinde TCMB’ye tekrar tekrar bağlanmak ve işlemek yerine bu datayı kullanıyorum.

Sizinle paylaşmak için 2 yöntem sunacağım. İlk ve kolay olan yolda, veriyi yukarıdaki txtden çekeceğiz. Bunun için gerekli kod:

<?php
$s=fopen(”http://profcoder.net/kod/doviz.txt”, “r”);
$t=fgets($s);
$p=explode(”|”, $t);
echo $p[0];
fclose($s);
?>

Burada echo yapılan p[0], dolar alış fiyatı. Sırasıyla p[]:
0 - Dolar Alış, 1 - Dolar Satış, 2 - Avro Alış, 3 - Avro Satış, 4 - Sterlin Alış, 5 - Sterlin Satış, 6 - İsviçre Frangı Alış, 7 - İsviçre Frangı Satış, 8 - Sterlin/Dolar oranı, 9 - Avro/Dolar oranı, 10 - Dolar/ İsviçre Frangı oranı.

Gelelim 2. yola. Burada host yönetiminde cron komutu ekleyebiliyor olmalısınız.

Bir doviz.php dosyası oluşturun:

<?php
$d=”USD/TRY”;
$a=”EUR/TRY”;
$s=”GBP/TRY”;
$im=”CHF/TRY”;
$sbd=”GBP/USD”;
$abd=”EUR/USD”;
$dbi=”USD/CHF”;
$dosya=file(”http://www.tcmb.gov.tr/kurlar/today.html?”);
for ($i=0; $i<sizeof($dosya); $i++)
{
if(ereg($d, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$da=$v[4];
$ds=$v[5];
}
if(ereg($a, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$aa=$v[3];
$as=$v[4];
}
if(ereg($s, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$sa=$v[4];
$ss=$v[5];
}
if(ereg($im, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$ia=$v[4];
$is=$v[5];
}
if(ereg($sbd, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$sd=$v[4];
}
if(ereg($abd, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$ad=$v[3];
}
if(ereg($dbi, $dosya[$i])) {
$v = split(”[[:space:]]+” , $dosya[$i]);
$di=$v[4];
}
}
$metin=$da.”|”.$ds.”|”.$aa.”|”.$as.”|”.$sa.”|”.$ss.”|”.$ia.”|”.$is.”|”.$sd.”|”.$ad.”|”.$di;
$fp = fopen( “doviz.txt” , “w” );
fwrite( $fp, $metin );
fclose( $fp );
?>

Bu dosyayı ve doviz.txt şeklinde oluşturacağınız bir boş txt dosyasını ftp programı ile web alanınızda uygun bir yere yükleyiniz. Cron yönetimine geçerek komutu ekleyelim:

Minute 0, Hour *, Day *, Month *, Weekday *

Command bölümünede
GET http://siteniz_ve_varsa_yol/doviz.php > /dev/null

Web sayfanızda da yukarıda 1. yolda verdiğim kodu kullanarak dataları alıp kullanabilirsiniz.

Böylece günde 100 ziyaretçisi olan bir websitesi bu ziyaretçilerin tahmini 300 görüntülemesi sonucu 300 kez TCMB’ye bağlanıp, bilgileri derleyip, ayıklayıp kullanacağına bunu saatte 1 kez, günde 24 kez (isterseniz günde 1 kez de yapabilirsiniz ama ne gerek var?) yaparak ve oluşan datayı kendi sunucusundan çekerek, yaklaşık %92 işlem tasarrufu yapacaktır.

Not: Borsa bilgilerini kullanmanızı sağlayacak bilgileride yakında ekleyeceğim.

EkleBunu EkleBunu


12 cevap “Döviz kuru optimizasyonu”

  1. eburhan :

    Kod paylaşımı için öncelikle teşekkürler ;)
    Ayrıca Cron-Job kullanamayanlar, verileri cache de edebilirler. Bir de verileri çekmek için cURL kullandık mı bilgileri çok daha hızlı alabiliriz diye düşünüyorum ;)

  2. Altan :

    Cache (Cron alternatifi olarak) konusunu tam anlamadım ama cURL konusunda haklı olsanda her hosting libcurl paketini yüklemiş değil. Onun için “ortak” bir kod yazmak daha doğru olur sanırım.

  3. eburhan :

    Demek istediğim Cron komutları kullanamıyorsak verileri bir kere çekip sunucumuzdaki bir dosya içerisine yazdırabiliriz. Daha sonra verileri bu dosyadan okuyabiliriz. Bu dosyayı da örneğin her 5 saatte güncelle diyebiliz.

  4. Altan :

    Evet şimdi anladım, ancak bunu manuel yapmak gerekecek…

  5. eburhan :

    Şimdi de ben anlamadım :) Neden manuel yapmaya gerek olsun?

  6. Altan :

    Cache’i yaratacak Php kodunu kim çalıştıracak ziyaretçiler mi? Eğer öyleyse her ziyarette kodun tekrar tekrar çalışmasını engellemek için bile olsa extra olarak “koşullar”ı kontrol eden kodlamalarda yapmak gerekecek.

    Bu noktada 1. yolda cron kullanmayanlara önerdiğim yol daha mantıklı olabilir.

  7. eburhan :

    Evet şimdi anladım. Ama bu kontrol yalnızca 1 tane if-else ile yapılıyor. Bu yüzden çok büyük bir problem çıkaracağını sanmıyorum.

    Ayrıca Cron-Job haricinde başka bildiğiniz bir yöntem var mı? Eğer yoksa verileri cache etmekten başka benim aklıma bir alternatif gelmiyor şu anda :roll:

  8. Altan :

    Cron’un alternatifi bir uygulama Linux serverlar için yok. Aslında gerekte yok. Cron biraz Windowsun “Zamanlanmış Görevleri”ne benziyor.

    Sonuçta sunucuya 1 saatte 1 şu uygulamayı çalıştır diyorum.

    Aslında Erhan bu sorunla çok güzel bir proje fikrini aydınlattın kafamda.

    Neden milletin cron ihtiyacını gerçekleştiren bir site yapmayalım değil mi :) Evet evet, millet çalıştırmak istedikleri sayfayı ve zaman aralığını girip eklesinler :) Bizde o aralıklarda o sayfayı çalıştıralım. Süper fikir oldu.

    Erhan her daim dostumsun :)

  9. eburhan :

    Ajax-TR’nin ve kendi sitemin durumunu sürekli izlediğim “Montastic” isimli bir servis var. URL’yi girdikten sonra belli bir zaman aralığında o web sitesinin çalışır halde olup olmadığını denetliyor. Size örnek teşkil edebilir. İncelemek istersen http://www.montastic.com/ adresine bakabilirsin ;)

    Sen de benim dostumsun :D

  10. Altan :

    Kodlama dert değil :)
    Hosta otomatik Cron eklemeyi daha öncede yaptım.
    Ama bu sefer güvenlik sorunu olacak :) adam cron ile restart atıp durmasın benim hosta :)
    Onun için bir çeşit denetim ve kontrol sistemine odaklanmam lazım :)

  11. Serdar :

    Çok güzel anlatmışsınız teşekkürler.Ama şöyle bir hata alıyorum çözümü nedir acaba yardımcı olabilirmisiniz?
    /bin/sh: /usr/bin/GET: Permission denied

  12. Altan Tanrıverdi :

    Merhaba Serdar.
    Hosting firmana ulaşarak Cron desteğinin açık olup olmadığını öğrenmelisin. Panelden açık olması bir anlam ifade etmiyor, çoğu zaman.

    Cevap bekleme sürecinde alternatif kodlar girebilirsin. Bir kaçını yazıyorum. Bunlardan bazılarını girebilmek için web root yolunu tam olarak bilmen gerekiyor. Örneğin Cpanel kullanıyorsan sol tarafta yazar.

    wget -O /dev/null http://www.siteniz.com/cron.php 2>/dev/null

    /usr/bin/php -q /home/siteyolu/public_html/cron.php

    cd /home/siteyolu/public_html/ ; php cron.php

    php /home/siteyolu/public_html/cron.php

    Aklıma gelenler bunlar…
    Eğer bunların hiç biri çalışmazsa ve hosting firması çözüm bulamazsa bana cron adresini gönder ben eklerim.

    Kolay gelsin.

Cevap yaz