Bir önceki yazımda pseudo-cron kullanımının CodeIgniter’da kullanımı için bir örnek vermiştim. Daha sonra onu kendim de kullanırken karmaşık bulmaya başladım. O yüzden oturup kendim bir tane yazdım.

Bu kodun çalışma mantığı aynı, fonksiyonumuz bir boş resim döndürüyor geriye. Yani istediğimiz sayfa ya da sayfalarda bu resmi yerleştirerek pseudo-cron işlemlerimizi yapıyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
/*
 * 
 * Tayfun Duran	tayfunduran.com 
 * 
 */
 
 
class Cron extends CI_Controller {
 
	function _gunluk(){
		$this->load->model('mgenel');
		$this->mgenel->tablo = 'sehir';
		$kyt = $this->mgenel->cek();
		$ici = '<?php
';
		$ici .= '$config["sehir"] = array(';
		foreach($kyt as $k){ 
			$ici .= "{$k['id']} => '{$k['isim']}', ";
		}
		$ici .= ');
?>';
		write_file('./application/cache/veri.php', $ici);
	}
 
 
 
	function __construct(){
		parent::__construct();
		$this->isler = array(
			'gunluk'		=> '1 day',
		);
		$this->dosya = './application/cache/dfr3tb7h';
		$this->ilk = array(
			'gunluk'		=> '2011-07-27 00:00:00',
		);
		$this->load->helper('file');
	}
 
	function index(){
		$this->_islet();
		header("Content-Type: image/gif");
		echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==");
	}
 
	function _islet(){
		if(file_exists($this->dosya)) $dizi = unserialize(read_file($this->dosya));
		else $dizi = $this->ilk;
		$zaman = time();
		foreach($this->isler as $i => $k){
			if(!isset($dizi[$i])) $dizi[$i] = $this->ilk[$i];
			$dz = strtotime($dizi[$i]);
			if($zaman > $dz){
				while($zaman > $dz){
					$dz = strtotime('+' . $k, $dz);
				}
				$dizi[$i] = date('Y-m-d H:i:s', $dz);
				eval('$this->_' . $i . '();');
			}
		}
		write_file($this->dosya, serialize($dizi));
		return true;
	}
 
}
?>

Sınıfımızda temel üç tane değişken tanımlıyoruz.

$this->dosya : Çalıştırılan fonksiyonları ve bir daha ne zaman çalıştırılacağı bilgisini içeren diziyi barındıran dosya. Yazılabilir bir klasörün içerisine yerleştirilmelidir.

$this->isler : Çalıştırılacak olan fonksiyonları ve hangi aralıklarla çalıştırılacakları bilgisini tutan dizi. Çalıştırılacak fonksiyon ismi anahtar, zaman aralığı bilgiside eleman değeri olarak verilir. Zaman aralığında kuulanılan değer strtotime komutundaki kullanılan zaman tanımlamalarıdır.

$this->ilk : Çalıştırılacak olan fonksiyonları ilk eklerken bir sonraki zamanlarının kaydedildiği değişken. Bu değişken normalde kullanılmaz ama her yeni bir cron işlemi (cron job) eklendiğinde bir öndeki çalışma zamanı bu diziye yazılır. Böylece bir sonraki zamandan itibaren fonksiyon çalışmaya devam eder.

Cron sınıfı yukarıdaki örnekte her gün gece yarısı çalışan fonksiyon ile veri tabanından okuduğu şehirlerden bir dizi oluşturup bunu bir php dosyası olarak saklıyor. Gerektiğinde koda include komutuyla eklenerek veri tabanına bağlantı kurmaya gerek kalmadan kullanılabiliyor.

Yukarıdaki sınıfı altına bir kaç satır ekleyerek CodeIgniter dışında da kullanmak olası.


, ,
Trackback

Şimdiye kadar yorum yazılmamış.

Yorumunuzu yazın