Location: PHPKode > scripts > HTML Rendele > html-rendele/class-html_rendele.php
<?php

/**
    Html Rendele
    Copyright (C) 2009  Gündüz Can YILMAZ

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
	
 * @author Gündüz Can YILMAZ
 * @copyright 2009
 * @version 1.0.0
 * @access public
 * @site http://www.cnylmz.net
 */

class html_rendele {
	
	public $url;
	public $referer;
	public $sonuc;
	private $ozellik;
	private $harman;
	private $durum;
	private $hata;
	public $log;
	private $tag_temp;
	public $result;
	
	function __construct(){
		$this->tag_temp=array();		
		$this->hata=null;
		$this->url=null;
		$this->ozellik=array();
		$this->sonuc=null;
		$this->durum=0;
		$this->log='';
		$this->result= &$this->sonuc;
	}
	
	function reset() {
		$this->__construct();
	}
	
	function key_sirala(& $dizi) {
		if(is_array($dizi)==false) return FALSE;
		$temp=array();
		foreach($dizi as $value)
		$temp[]=$value;
		$dizi=$temp;
	}
	
	function okunmus($kod_yigini) {
		if($this->durum > 0)
		$this->log.='<b>Eski kaynak kodlarının üzerine yazılacak!!!</b><br />';
		
		$this->harman=$kod_yigini;
		$this->log.='Kaynak kodu elle girildi, link okunmuş sayılıyor<br />';
		
		$this->durum=1;
		return true;
	}
	
	function oku() {
		
		if(empty($this->url))
		{
			$this->log.='Adres Belirtilmemiş. Oku fonksiyonu başarısız<br />';
			return false;
		}
		
		if(strpos($this->url,'http://')===false)
		{
			$this->url='http://'.$this->url;
			$this->log.='Adrese "http://" öneki eklendi<br />';
		}
		
		$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
		$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
	 	$header[] = "Cache-Control: max-age=0";
  		$header[] = "Connection: keep-alive";
	  	$header[] = "Keep-Alive: 300";
	  	$header[] = "Accept-Charset: ISO-8859-9,utf-8;q=0.7,*;q=0.7";
	  	$header[] = "Accept-Language: tr-TR,tr;q=0.5";
	  	$header[] = "Pragma: ";

		$curl = curl_init();
		
		curl_setopt($curl, CURLOPT_URL, $this->url);
		curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
		
		if($this->referer)
		{
			if(strpos($this->referer,'http://')===false)
			{
				$this->referer='http://'.$this->referer;
				$this->log.='Referer\'a http:// ön eki eklendi<br />';
			}	
			curl_setopt($curl, CURLOPT_REFERER, $this->referer); 
		} else
			curl_setopt($curl, CURLOPT_REFERER, 'http://www.google.com');
			
		curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); 
		
		ob_start();
		$adres= curl_exec($curl);
		curl_close($curl);
		$this->harman = ob_get_contents();
		ob_end_clean();
		
		if($this->durum>0)
		$this->log.='<b>Eski kaynak kodlarının üzerine yazılacak!!!</b><br />';
		$this->log.=$this->url.' linki okundu<br />';
		$this->durum=1;
		return true;
	}
	
	
	function tag_ozellik($ozellik,$deger) {
		$this->ozellik[$ozellik]=$deger;
	}
		
	
	function kapananbul($harman) {
	preg_match_all('/[\/|<]'.$this->tag.'([^>]*)>/si',$harman, $bulunanlar, PREG_SET_ORDER);
	$bulunan_s=count($bulunanlar);
	$say_acik=0;
	$kapanan_temp=array();
	$ktemp['pos']=0;
	for($i=0;$i<$bulunan_s;$i++)
	{
		$ktemp['pos']=strpos($harman,$bulunanlar[$i][0],$ktemp['pos']);
		$temp['strlen']=strlen($bulunanlar[$i][0]);
		if(substr($bulunanlar[$i][0],0,1)=='<')
			{
				$ktemp['aciklar'][]=$i;
				$bulunanlar[$i]['pos_basla']=$ktemp['pos']+$temp['strlen'];
			}
		else if(substr($bulunanlar[$i][0],0,1)=='/')
			{
				@rsort($ktemp['aciklar']);
				$bulunanlar[$ktemp['aciklar'][0]]['pos_bit']=$ktemp['pos']-2;
				unset($ktemp['aciklar'][0],$bulunanlar[$i]);
			}
		$ktemp['pos']+=$temp['strlen'];
		
	}
	return $bulunanlar;		
	}
	
	function ozellik_bul($harman){
		$temp=explode(' ',trim($harman));
		$temp_dizi=array();
		for($k=0;$k<count($temp);$k++)
			{
				$ozellik=explode('=',$temp[$k]);
				if($ozellik[0]=='') $ozellik[0]='icerik';
				$anahtar=$ozellik[0];
				unset($ozellik[0]);
				$deger=implode('=',$ozellik);
				if(substr($deger,0,1)=='"'||substr($deger,0,1)=="'")
				{
					if(substr($deger,-1)!=substr($deger,0,1))
					$temp[($k+1)]=$temp[$k].' '.$temp[($k+1)];
				$deger=substr($deger,1,strlen($deger)-2);
				}
				$temp_dizi[$anahtar]=$deger;
			}
		return $temp_dizi;
	}
	
	function cek() {
		if( $this->durum <1 )
		{
	 		$this->log.='Henüz link okunmamış, cek fonksiyonu link okutuyor<br />';
			if($this->oku()===false)
				return false;
		}

		   	$tag_ozellikler=$this->kapananbul($this->harman);
			$bulunan_s=count($tag_ozellikler);
		if($bulunan_s>0)
			{
				$this->key_sirala($tag_ozellikler);
				$this->log.=count($tag_ozellikler).' tane tag bulundu<br />';
				for($i=0;$i<$bulunan_s;$i++)
				{
				$tag_temp=$this->ozellik_bul($tag_ozellikler[$i][1]);
				$tag_temp['icerik']=substr($this->harman,$tag_ozellikler[$i][pos_basla],($tag_ozellikler[$i][pos_bit]-$tag_ozellikler[$i][pos_basla])+1);
				$tag_ozellikler[$i]=null;
				$tag_ozellikler[$i]=$tag_temp;
					
				}
			}
		else {
		
			preg_match_all('@<([a-zA-Z0-9\n\t\s=\"\']*?)'.$this->tag.'(.*?)>@is',$this->harman,$bulunanlar);
			$bulunan_s=count($bulunanlar[2]);
		
			if($bulunan_s>0) {
				$this->log.=$bulunan_s.' tane tag bulundu<br />';
				$tag_ozellikler=array();
	
					
				for($i=0;$i<$bulunan_s;$i++)
				{
					$ozellikler=preg_replace('@\s+@',' ',str_replace(array("\n","\t"),' ',$bulunanlar[2][$i]));
					$temp=explode(' ',trim($ozellikler));
					for($k=0;$k<count($temp);$k++)
						{
							$ozellik=explode('=',$temp[$k]);
							if($ozellik[0]=='') $ozellik[0]='esas';
							$anahtar=$ozellik[0];
							unset($ozellik[0]);
							$deger=implode('=',$ozellik);
							if(substr($deger,0,1)=='"'||substr($deger,0,1)=="'")
							{
								if(substr($deger,-1)!=substr($deger,0,1))
								$temp[($k+1)]=$temp[$k].' '.$temp[($k+1)];
							$deger=substr($deger,1,strlen($deger)-2);
							}
							$tag_ozellikler[$i][$anahtar]=$deger;
						}
				}
			} else {
				$this->durum=2;
				$this->log.='Uygun tag bulunamadı';
				return false;
			}
		}

		if(array_key_exists('*',$this->ozellik))
		{
			$this->sonuc=$tag_ozellikler;
			$this->log.='Tüm taglar sonuc olarak verildi<br />';
			return true;
		}
		
		if(array_key_exists('?',$this->ozellik))
		{
			$temp=count($tag_ozellikler);
			for($i=0;$i<$temp;$i++)
			{
				if(array_search($this->ozellik['?'],$tag_ozellikler[$i])===false)
				{
					unset($tag_ozellikler[$i]);
				}
				
			}
			$this->log.='Özelliklerinden herhangi biri '.$this->ozellik['?'].' olmayan taglar elendi<br />';
			unset($this->ozellik['?']);
		}
		

	$temp=count($tag_ozellikler);
	if(array_search('?',$this->ozellik)!==false)
		{
			$key=array_search('?',$this->ozellik);
			$temp=count($tag_ozellikler);
			for($i=0;$i<$temp;$i++)
			{
				if(array_key_exists($key,$tag_ozellikler[$i])===false)
				{
					unset($tag_ozellikler[$i]);
				}
				
			}
			$this->log.=$key.' özelliği olmayan taglar elendi<br />';
			unset($this->ozellik[$key]);
		}


		$temp=count($this->ozellik);
		if($temp>0) {
		$tag_temp=$tag_ozellikler;
		$tag_ozellikler=array();
		foreach($this->ozellik as $anahtar => $deger ) { 
			for($i=0;$i<count($tag_temp);$i++)
			{
				if(isset($tag_temp[$i][$anahtar])){
					if(strpos($deger,'||')!==false) {
					$degerler=explode('||',$deger);
					if(array_search($tag_temp[$i][$anahtar],$degerler)!==false)
						$tag_ozellikler[]=$tag_temp[$i];
					} else if($tag_temp[$i][$anahtar] == $deger)
					{
						$tag_ozellikler[]=$tag_temp[$i];
					}
				}				
			}
		$this->log.='<b>'.$anahtar.'</b> değeri <b>'.$deger.'</b> olmayan taglar elendi<br />';
		}
		}
		
		$this->log.=count($tag_ozellikler).' adet uygun tag kaldı<br />';

		$this->sonuc=$tag_ozellikler;
		$this->durum=2;
		return true;
	}
	
	function read() {
		return $this->oku();
	}
	
	function tag_select($element,$value) {
		$this->tag_ozellik($element,$value);
	}
	
	function execute() {
		return $this->cek();
	}
	
	function source($source_code) {
		return $this->okunmus($source_code);
	}
		
}

?>
Return current item: HTML Rendele