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.

Ağustos 13th, 2007 at 11:34
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
Ağustos 13th, 2007 at 11:51
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.
Ağustos 13th, 2007 at 11:56
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.
Ağustos 13th, 2007 at 11:59
Evet şimdi anladım, ancak bunu manuel yapmak gerekecek…
Ağustos 13th, 2007 at 12:13
Şimdi de ben anlamadım
Neden manuel yapmaya gerek olsun?
Ağustos 13th, 2007 at 12:18
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.
Ağustos 13th, 2007 at 12:27
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
Ağustos 13th, 2007 at 12:33
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
Ağustos 13th, 2007 at 12:49
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
Ağustos 13th, 2007 at 12:55
Kodlama dert değil
adam cron ile restart atıp durmasın benim hosta 

Hosta otomatik Cron eklemeyi daha öncede yaptım.
Ama bu sefer güvenlik sorunu olacak
Onun için bir çeşit denetim ve kontrol sistemine odaklanmam lazım
Ocak 29th, 2008 at 23:23
Ç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
Ocak 30th, 2008 at 3:45
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.