PHP Query Cache

basit bir query cache sınıfı. php5 gerekiyor evet.

Kullanımı aşağıdaki gibi. elbette class ilk olarak include edilmeli evet. ikinci parametre true olarak verilirse o dosya için bir cache yoksa eğer ilk olarak cache oluşturulcak ve tekrar çağrıldığında cache’deki veri dönecek

kullanımı:

$dbCache = new dbcache();
 
//eğer query cache'i varsa
    $retVal = $dbCache->checkQueryCache($query);
 
    if($retVal !== FALSE)
   {
	return unserialize($retVal);	
   }
 
//bu satır da querycache'ini yazmak için
//$return değişkeni query'den dönen sonuçların tutulduğu bir array
$dbCache->writeQueryCache($query,serialize($return));

bu da sınıf. cache_dir ile tanımlanan klasöre yazma izni verilmeli:

< ?php
 
/*
 * Class: Simple Query Cache v0.2
 * @author: Doruk Özalp
 * 
 * last update:
 * 23 / 01 / 2010 23:22 PM
 * 
 * changelog:
 * v0.2:
 * added file modification time support
 * 
 * v0.1:
 * initial release
 * 
 * 
 */
 
 
class dbcache
{
	//PRIVATE VARIABLES
	private $cache_file;
	private $base_dir;
	private $this_dir;
	private $lifetime;
	private $query_data;
	private $query;
        private $cache_dir = "assets/output_cache/";
 
	//CONSTRUCTOR
	function __construct()
	{
		$this->setBaseDir($_SERVER["REQUEST_URI"]);
		$this->setThisDir($this->cache_dir) . md5($this->getBaseDir()));
		$this->setLifeTime(3600); // 1-hour
	}
 
	//DECONSTRUCTOR
	function __destruct()
	{
 
	}
 
	//PUBLIC FUNCTIONS
	public function checkQueryCache($query)
	{
		$retVal = FALSE;
 
		$this->setQuery($query);
		$this->setCacheFile($this->getThisDir() . "/" . md5($this->getBaseDir() . $this->getQuery()));
 
		if($this->checkCacheFile())
		{	
			$retVal = $this->loadCacheFile();
		}
 
		return $retVal;
	}
 
	public function writeQueryCache($query, $query_data)
	{
		$this->setQuery($query);
		$this->setQueryData($query_data);		
		$this->setCacheFile($this->getThisDir() . "/" . md5($this->getBaseDir() . $this->getQuery()));
 
			if($this->checkCacheFile())
			{
				clearstatcache();
 
				if(time() - filemtime($this->getCacheFile()) > $this->getLifeTime())
				{
					$this->writecachefile();
				}
			}
			else
			{
				$this->writecachefile();	
			}
	}
 
	//PRIVATE FUNCTIONS
 
	private function checkCacheFile()
	{
		$retVal = FALSE;
 
		if(file_exists($this->getCacheFile()))
		{
			$retVal = TRUE;
		}
 
		return $retVal;
	}
 
	private function loadCacheFile()
	{
		return file_get_contents($this->getCacheFile());
	}
 
	private function writecachefile()
	{
		if(!is_dir($this->getThisDir()))
		{
			mkdir($this->getThisDir(), 0777);
		}
 
		$handle = fopen($this->getCacheFile(), 'w+'); 
		fwrite($handle, $this->getQueryData());
		fclose($handle);
	}
 
	//SETTER AND GETTERS
 
	private function setBaseDir($input)
	{
		$this->base_dir = $input;
	}
 
	private function getBaseDir()
	{
		return $this->base_dir;
	}
 
	private function setThisDir($input)
	{
		$this->this_dir = $input;
	}
 
	private function getThisDir()
	{
		return $this->this_dir;
	}
 
	private function setLifeTime($input)
	{
		$this->lifetime = $input;
	}
 
	private function getLifeTime()
	{
		return $this->lifetime;
	}
 
	private function setCacheFile($input)
	{
		$this->cache_file = $input;
	}
 
	private function getCacheFile()
	{
		return $this->cache_file;
	}
 
	private function setQueryData($input)
	{
		$this->query_data = $input;
	}
 
	private function getQueryData()
	{
		return $this->query_data;
	}
 
	private function setQuery($input)
	{
		$this->query = $input;
	}
 
	private function getQuery()
	{
		return $this->query;
	}
}
?>

PHP Partial Cache

basit bir partial cache sınıfı. php5 gerekiyor evet.

Kullanımı aşağıdaki gibi. elbette class ilk olarak include edilmeli evet. ikinci parametre true olarak verilirse o dosya için bir cache yoksa eğer ilk olarak cache oluşturulcak ve tekrar çağrıldığında cache’deki veri dönecek.

 
$output = new outputcache();
 
$output->load("header.php", true);
$output->load("main.php", true);
$output->load("footer.php", true);

bu da sınıf. cache_dir ile tanımlanan klasöre yazma izni verilmeli:

< ?php
 
/*
 * Class: Simple Output Cache v0.2
 * @author: Doruk Özalp
 * 
 * last update:
 * 22 / 01 / 2010 22:20 PM
 * 
 * changelog:
 * v0.2:
 * added file modification time support
 * 
 * v0.1:
 * initial release
 * 
 * 
 */
 
 
class outputcache
{
	//PRIVATE VARIABLES
	private $output = array();
	private $cache_file;
	private $base_dir;
	private $this_dir;
	private $lifetime;
	private $include_file;
        private $cache_dir = "assets/output_cache/";
 
 
	//CONSTRUCTOR
	function __construct()
	{
		$this->setBaseDir($_SERVER["REQUEST_URI"]);
		$this->setThisDir($this->cache_dir . md5($this->getBaseDir()));
		$this->setLifeTime(3600); // 1-hour
	}
 
	//DECONSTRUCTOR
	function __destruct()
	{
 
	}
 
	//PUBLIC FUNCTIONS
 
	public function load($file, $cache = FALSE)
	{
		$this->setIncludeFile($file);
 
		if($cache === FALSE)
		{
			include_once($this->getIncludeFile());
		}
		elseif($cache === TRUE)
		{
			$this->setCacheFile($this->getThisDir() . "/" . md5($this->getBaseDir() . $this->getIncludeFile()));
 
			if($this->checkCacheFile())
			{
				clearstatcache();
 
				if(time() - filemtime($this->getCacheFile()) > $this->getLifeTime())
				{
					$this->makeCacheFile();
				}
				else
				{
					$this->loadCacheFile();	
				}
			}
			else
			{
				$this->makeCacheFile();	
			}
		}
	}
 
	//PRIVATE FUNCTIONS
 
	private function makeCacheFile()
	{
		$this->start();
 
		include_once($this->getIncludeFile());
 
		$this->setOutput($this->getCacheFile(), $this->getContent());
 
		$this->end();
 
		$this->writecachefile();	
	}
 
	private function checkCacheFile()
	{
		$retVal = FALSE;
 
		if(file_exists($this->getCacheFile()))
		{
			$retVal = TRUE;
		}
 
		return $retVal;
	}
 
	private function loadCacheFile()
	{
		echo file_get_contents($this->getCacheFile());
	}
 
	private function writecachefile()
	{
		if(!is_dir($this->getThisDir()))
		{
			mkdir($this->getThisDir(), 0777);
		}
 
		$handle = fopen($this->getCacheFile(), 'w+'); 
		fwrite($handle, $this->getCacheContent($this->getCacheFile()));
		fclose($handle);
	}
 
	private function getCacheContent($file_md5)
	{
		return $this->getOutput($file_md5);
	}
 
	private function start()
	{
		return ob_start();
	}
 
	private function end()
	{
		return ob_end_flush();
	}
 
	private function getContent()
	{
		return ob_get_contents();
	}
 
	//SETTER AND GETTERS
 
	private function setBaseDir($input)
	{
		$this->base_dir = $input;
	}
 
	private function getBaseDir()
	{
		return $this->base_dir;
	}
 
	private function setThisDir($input)
	{
		$this->this_dir = $input;
	}
 
	private function getThisDir()
	{
		return $this->this_dir;
	}
 
	private function setLifeTime($input)
	{
		$this->lifetime = $input;
	}
 
	private function getLifeTime()
	{
		return $this->lifetime;
	}
 
	private function setCacheFile($input)
	{
		$this->cache_file = $input;
	}
 
	private function getCacheFile()
	{
		return $this->cache_file;
	}
 
	private function setOutput($index, $input)
	{
		$this->output[$index] = $input; 
	}
 
	private function getOutput($index)
	{
		return $this->output[$index];
	}
 
	private function setIncludeFile($input)
	{
		$this->include_file = $input;
	}
 
	private function getIncludeFile()
	{
		return $this->include_file;
	}
}
?>

Opera 10.50

henüz daha pre-alpha olan bu tarayıcı sanırım en iyi arayüze sahip tarayıcı uzak ara. buradan gün itibariyle çıkan en son sürümü indirebilir.

Diğer kategorisine gönderildi

Merkez Bankasından Günlük Döviz Kurlarını Almak

PHP be Mysql ile Merkez Bankasından günlük kurları almak için ufak bir script. PHP5 gerekiyor tabii ki.

Kullanımı:

$TCMB = new TCMB("http://www.tcmb.gov.tr/kurlar/today.xml");
$TCMB->updateCurrecy();

İlk olarak tablomuz:

CREATE TABLE IF NOT EXISTS `kurlar` (
  `kur_no` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `kur_isim` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `kur_kod` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `kur_alis` DECIMAL(6,5) UNSIGNED NOT NULL,
  `kur_satis` DECIMAL(6,5) UNSIGNED NOT NULL,
  `kur_tarih` datetime NOT NULL,
  PRIMARY KEY (`kur_no`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Son Olarak php scriptimiz:

< ?php
class TCMB
{
	private $buying;
	private $selling;
	private $currency_name;
	private $currency_code;
	private $date;
	private $TCMBxml;
 
	function __construct($url)
	{
		$this->setTCMBxml($url);
	}
 
	function __destruct()
	{
 
	}
 
	public function updateCurrecy()
	{
		$xmlContents = simplexml_load_file($this->getTCMBxml(), 'SimpleXMLElement', LIBXML_NOCDATA);		
		$this->setDate(strtotime($xmlContents['Tarih'][0]));
 
		foreach($xmlContents as $object => $value)
		{
			$this->setBuying($value->ForexBuying);
			$this->setSelling($value->ForexSelling);
			$this->setCurrencyCode($value['Kod'][0]);
			$this->setCurrencyName($value->Isim);
 
			$this->insertDate($this->getCurrencyName(), $this->getCurrencyCode(), $this->getBuying(), $this->getSelling(), date("Y-m-d H:i:s",$this->getDate()));
		}
	}
 
	private function insertDate($kur_isim, $kur_kod, $kur_alis, $kur_satis, $kur_tarih)
	{
		$retVal = FALSE;
		$sql = "INSERT INTO kurlar(kur_isim,kur_kod,kur_alis,kur_satis,kur_tarih) VALUES('".mysql_real_escape_string($kur_isim)."','".mysql_real_escape_string($kur_kod)."','".mysql_real_escape_string($kur_alis)."','".mysql_real_escape_string($kur_satis)."','".mysql_real_escape_string($kur_tarih)."')";
		$query = mysql_query($sql, $GLOBALS['baglanti']);
 
		if(mysql_affected_rows() == 1)
		{
			$retVal = TRUE;
		}
 
		return $retVal;
	}
 
	function setTCMBxml($url)
	{
		$this->TCMBxml = $url;
	}
 
	function getTCMBxml()
	{
		return $this->TCMBxml;
	}
 
	function setDate($input)
	{
		$this->date = $input;
	}
 
	function getDate()
	{
		return $this->date;
	}
 
	function setSelling($input)
	{
		$this->selling = $input;
	}
 
	function getSelling()
	{
		return $this->selling;
	}
 
	function setBuying($input)
	{
		$this->buying = $input;
	}
 
	function getBuying()
	{
		return $this->buying;
	}
 
	function setCurrencyName($input)
	{
		$this->currency_name = $input;
	}
 
	function getCurrencyName()
	{
		return $this->currency_name;
	}
 
	function setCurrencyCode($input)
	{
		$this->currency_code = $input;
	}
 
	function getCurrencyCode()
	{
		return $this->currency_code;
	}
}
?>