Muradiye Forum
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Aşağa gitmek
BaRaN
BaRaN

Php İle Arama Motoru Hazirlamak 1210
Erkek Yay
Yılan
Mesaj Sayısı : 873
Doğum tarihi : 02/12/89
Yaş : 34
Nerden : güneşin doğduğu yer(DOĞUBEYAZIT)
İş/Hobi : cep telefonu
Bilgi : <center><font color="blue"><marquee direction="left" style="background:white">Muradiye Forum Bilgi Paylaşım Platformu</marquee></font></center
Rep Gücü : 0
Rep Puan : 8
Kayıt tarihi : 20/12/08
http://muradiyeforum.net

Php İle Arama Motoru Hazirlamak Empty Php İle Arama Motoru Hazirlamak

Çarş. Ara. 31, 2008 2:09 pm
Php İle Arama Motoru Hazirlamak






Bir
cok kisinin kendi sitesi icin bir arama motoru olusturmak istedigini
gordugum icin PHP ile bu isin nasil yapilacagina baktim.Bir kac
kutuphane gezdikten sonra en sonunda aradigim ornege bir kitapta
rastladim.


Yanliz kucuk bir talihsizlik
ilekitaptaki ornegin bir cok hata icerdigini gordum.Bir tarafi
duzeltiyorsunuz baska bir yerde hata veriyor ve anlamsiz sonuclar
ortaya cikiyordu.Bende en az 10-15 noktaya "echo ()" ile degisken
sonuclarini belirli noktalarda isleyerek ve "gettype ()" fonksiyonu ile
degiskenin yapisina bakarak sorunun nerede oldugunu anlamaya
calisiyordum.


Zaten bir onceki yazimda ozellikle degisken veri tipi ve ozelliklerini anlamamiza yarayan fonksiyonlari makale yapmistim Php İle Arama Motoru Hazirlamak Smile


Once degiskenleri,yapilarini,davranislarini ogrenip sonra ava cikmak daha mantikli gelmisti...


Simdi kitaptaki ornegin yapisini
inceleyelim.ben bu ornekle ilgili yaklasik 1 haftadir
calisiyorum.Hatalari bulup cikarirken eglendigimi soyleyemem ama cok
sey ogrendim.


Ilk olarak belirtmeliyim ki
yazar gercekten usta bir programci ve neden bu kadar cok hata yaptigini
halen cozebilmis degilim.Ben ozellikle betik'teki degisken isimleri ve
aciklamalara dokunmadim ki duzelltigim ve oldukca gelistirdigim bu
ornegi ona da gonderirken ikinci bir isle ugramayayim istedim.


Yazar bir web sitesini
indekslemek ve bu indekse dayali bir arama motoru kurabilmek icin
**********> etiketlerinden yararlanmis.Zaten tum arama motorlarida
siteleri o **********> etiketlerine gore indeksliyor.


**********> etiketleri ve etiketleri arasina yaziliyor ve asagidaki gibi bir yapisi bulunuyor :



********** name="keywords" content="kelime1,kelime2,kelime3,vb">
********** name="description" content="Buraya ise sayfanin aciklamasi geliyor...">
Yani her web sayfanizin,kendisi
ile ilgili bir anahtar kelime ve aciklama alanina sahip olmasi
gerekiyor.HTML ile bu saglandiginda siteyi indeksleyecek program bu
**********> etiketlerinin icinde yer alan, "keywords" yani anahtar
kelimeler ve "description" denilen aciklama alani ile sayfayi
indeksliyor ve veritabaninda o sayfa ile ilgili bir satir aciyor.


Bundan ayri olarak veritabanina
o sayfanin isminide yaziyor ve arama yapilirken sayfanin ismi alaninda
da aranan kelime icin bir eslesme olup olmadigina bakiliyor.




Boylece "keywords","description"
ve "filename" yani sirasi ile "anahtar kelimeler","aciklama" ve
"dosyaadi" olarak uc alan veritabaninda yer aliyor.Birisi bir seyler
aradiginda sayfalarla ilgili sonuclar veritabaninda karsilastiriliyor
ve uyan sonuclar ekrana geliyor.


Hazirladigimiz program
veritabanindan bagimsiz calisiyor.yani siz isterseniz MySQL isterseniz
ORACLE isterseniz PostgreSQL veritabanini kullanabilirsiniz.Program
icinde DB.php isimli bir sinif tarafindan veritabanina baglanti
gerceklestiriliyor.Bu dosya PHP ile berber geliyor ve veritabani
bagimsiz uygulama yazmak icin kullaniliyor.Programin yapisina bakinca
nasil boyle bir islemin saglandigini gorebilirisiniz.


Programin ayarlar dosyasindan
istediginiz veritabani ismini yazmaniz programin o veritabani ile
ilgili fonksiyonlari kullanarak veritabani ile etkilesime gecemesini
sagliyor...


Hemen hemen butun ayarlar bir tek ayar dosyasindan yapiliyor ama yinede bazi ayarlar hakkinda konusmak istiyorum.


Ilk olarak sitenizdeki butun
dosyalar sizin belirlediginiz bir klasor baz alinarak ice dogru gidecek
sekilde taraniyor.Bu tarama sirasinda sizin belirlediginiz dosya
uzantisina sahip dosyalar indeksleniyor.Ornegin yanlizca sonu .html ile
biten dosyalarin indekslenmesini yada sadece sonu .php ile biten
dosyalarin indekslenmesini saglamak mumkun oluyor.


Asagiya ayar dosyasinin bir ornegini yaziyorum :



dbtype:mysql ; SQL Sunucu ne tip bir veritabani?
Host:localhost ; SQL Sunucu Nerede?
User:turkphp_user ; SQL Kullanici Adi
Password:****** ; SQL Sifresi
database_name:turkphp_veritabani ; Veritabani ismi?
filters:html,htm,php,php3,php4 ; Indekslenecek dosya uzantilari?
saveresults:yes ; Sonuclari kaydet?
basedir:/home/turkphp/public_html ; Indeksleme icin temel alinacak klasor?
Tum ayarlarin yanina turkce olarak ne anlama geldigini yazdim.


Simdi de veritabani icin tablo yapisini inceleyelim :


Tum kayitlari tutmak icin bir
tek tablodan yararlanmak yetiyor.Asagidaki SQL yapisini kendi
veritabani sunucunuz uzerinde calistirin,



CREATE TABLE sites_table (
id INT(4) PRIMARY KEY AUTO_INCREMENT,
filename VARCHAR (70),
keywords TEXT,
description TEXT
);


Guzel simdi "sites_table"
isminde bir tabloya ve o tablonun icinde yer alan tablo alanlarini
yaratmis oldunuz.Sitemizdeki tum dosyalar indekslendikten sonra bu
alanlara ilgili veriler yazilacak.




Kurulum :


1.Bir paket halinde sikistirilmis dosyayi bilgisayariniza indirin.
2.Web sunucunuza upload yapmadan once 'config.txt' dosyasini acarak istediginiz ayarlari girin.
3.Yukaridaki SQL sorgusunu uygulayip tabloyu yarattiysaniz,artik
dosyalari sunucuya yukleyebilirsiniz.(Dosyalari herhangi bir klasore
koyabilirisiniz ama size tavsiyem ornegin "arama_motoru" gibi bir
klasor acip o dizine "777" erisim haklari vermenizdir.Cunku indeksleme
sirasinda bazi kayit dosyalari yaratilmaktadir.Eger dosyalara ve dizine
"777" erisim hakki vermez iseniz klasorde gerekli izinlere sahip
olmadigi icin program gecici kayit dosyalarini yaratamayacaktir.)
4."arama_motoru" isminde bir dizine dosyalari koydugunuzu kabul
edersek,simdi web tarayicinizdan asagidaki gibi adrese gidebilirisiniz :


http://www.sizinalanadiniz.com/arama_motoru/octopus.php


Sayfa acilir acilmaz sizin
ayarlar bolumunde verdiginiz verilere dayanarak siteyi bastan asagi
(sizin belirlediginiz klasorden baslayarak) indekslemeye ve sayfalarda
"keywords" ve "description" **** etiketlerine bakamya
baslayacaktir.Eger bu kayitlara rastlanmaz ise bu alanlar veritabanina
bos olarak kayit edilir ve yanlizca dosyalarinizin ismi veritabaninda
bir kayit olarak yer alir.


5.Sitenizin indekslenmesi
bittiginde sayfanin en altinda bu verileri veritabanina yazip yazmak
istemediginiz sorulur.Bu islemden sonra artik siteniz indekslenmis ve
aranmaya hazir hale gelmistir.


6.Simdi ornek bir arama yapmak icin,


http://www.sizinalanadiniz.com/arama_motoru/voyager.php


adresine gidebilirsiniz.Ilk
olarak sayfa acildiginda indeks sonuclari ve en altta bir arama kutusu
gorunur.Oraya arama kriteri girerek arama islemine
baslayabilirsiniz.Eger basit bir web formu hazirlayarak,her defasinda
veritabanindaki butun sonuclarin ekrana gelmesini engelleyerek yanlizca
arama kutusunun yer aldigi bir sayfa hazirlamak istiyorsaniz ornegin
asagidaki gibi bir html sayfasi hazirlayarak da arama yapabilirsiniz :







Anahtar kelimeleri yaziniz :




Kurulumu boylece tamamlamis
oldunuz.Eger bir sebepten oturu hata mesaji aliyorsaniz once klasore
gerekli izni vermeyi deneyin.Eger klasor izinleri tamamsa bu sefer
veritabani kullanici adi ve sifrenizi gozden gecirin.Bu progrm bazi
PEAR siniflarini kullanmaktadir.Bu sinifilar PHP ile otomatik gelir ve
bu konuda bir sikinti yazamaniz mumkun degildir.



Programi bilgisayariniza indirin :


BURDAN BİLGİSAYARINIZA İNDİREBİLİRSİNİZ


Kaynak : ISBN 0-672-31924-1


Not : Kaynak kitapta yer alan
yapi,duzen kaynak kodlar ile yukarida indirdiginiz sikistirilmis
dosyadaki kaynak kodlar cok farklidir.
BaRaN
BaRaN

Php İle Arama Motoru Hazirlamak 1210
Erkek Yay
Yılan
Mesaj Sayısı : 873
Doğum tarihi : 02/12/89
Yaş : 34
Nerden : güneşin doğduğu yer(DOĞUBEYAZIT)
İş/Hobi : cep telefonu
Bilgi : <center><font color="blue"><marquee direction="left" style="background:white">Muradiye Forum Bilgi Paylaşım Platformu</marquee></font></center
Rep Gücü : 0
Rep Puan : 8
Kayıt tarihi : 20/12/08
http://muradiyeforum.net

Php İle Arama Motoru Hazirlamak Empty Geri: Php İle Arama Motoru Hazirlamak

Çarş. Ara. 31, 2008 2:10 pm
EK - 1 Kaynak Kodlar


octopus.php



include 'File/Find.php';
include 'LoadConfig.php';


$config = LoadConfig ('config.txt');


#A-Z ye dosyalar ve nokta karekterini tanimladim...
#Siz istediginiz degisikligi yaparak hangi dosylarin bulunup
#Indekslenmesini istediginizi burada belirleyebilirsiniz.
$regex = "[a-zA-Z0-9.]";


$fs = new File_Find;


$files = $fs->search ($regex,$config['basedir'], 'perl');


while ($file = array_pop ($files)) {
$****_tags = get_****_tags ($file);
$indexed .= "$file | " . $****_tags[keywords] . ' | ';
$indexed .= str_replace (" ", '', $****_tags[description]) . " ";
}


if (strtolower ($config['saveresults']) == 'yes' or
$config['saveresults'] == '1') {
touch ('savefile'); #Create if doesn't exist
$n = (int)join('', file('savefile'));


$fp = @fopen ('savefile','w') or die("Cannot Open savefile");
fputs ($fp, ++$n);
fclose($fp) or die("Cannot Close savefile");


$filename = 'octopus_index' . $n . '.txt';
$fp = @fopen ($filename, 'w') or die ("Cannot Open $filename");
fwrite ($fp,$indexed);
@fclose ($fp) or die("Cannot Close $filename");
confirm ($indexed);
} else {
$filename = 'octopus_index.txt';
$fp = @fopen ($filename,'w') or die("Cannot Open $filename");
fwrite ($fp,$indexed);
@fclose($fp) or die("Cannot Close $filename");
confirm($indexed);
}


function confirm () {
global $filename,$indexed;
?>


Dosylarin Indekslenmesi Basarili Sekilde Tamamlandi


Dosyalar Indeksleniyor...Lutfen Bekleyiniz:


$indexed = explode (" ", $indexed);


while (list (, $file) = each ($indexed)) {
$file = str_replace ('|', '
', $file);
print "$file

";
}
?>








Dosyalari Indekslemeyi Bitirdim.

Dosyalari Tekrar Indekslemek Istiyorum.





}
?>


finalize.php



include 'DB.php';
include 'LoadConfig.php';


$config = LoadConfig ('config.txt');


if ($finalize == 'yes') {
$dbconn = array ('phptype' => $config[dbtype],
'username' => $config[User],
'password' => $config[Password],
'database' => $config[database_name],
'hostspec' => $config[Host]);


$dbh = DB::connect($dbconn);


if (DB::isError ($dbh)) {
die (sprintf ('Hata1 [%d]: %s',$dbh->getCode(), $dbh->getMessage()));
}


$fcontents = file ($filename);


while(list($key,$line) = each($fcontents)) {
list ($fname,$keywords,$desc) = explode('|', $line);


$fname = ereg_replace($config['basedir']," ",$fname);
$fname = trim($fname);
$keywords = trim($keywords);
$desc = trim($desc);




$stmt = 'INSERT INTO sites_table (filename, keywords, description)';
$stmt .= " VALUES ('$fname','$keywords','$desc')";
$dbh->query ($stmt);
if (DB::isError ($dbh)) {
die (sprintf ('Hata 2 [%d]: %s',$dbh->getCode(), $dbh->getMessage()));
}
}
//$dbh->close();
print "Sitenizin Indekslenmesi Tamamlandi...";
} elseif ($finalize == 'no') {
unlink ($filename)
or die ("Cannot delete $filename");
if ($saveresults == 'yes' or $saveresults == '1') {
$n = (int)join ('',file ('savefile'));
$fp = @fopen ('savefile','w') or die ("Connot Open savefile");
fputs ($fp, --$n);
@fclose ($fp) or die ("Cannot Close savefile");
}
print "Yapilan tum islemler geri alindi ve indeks dosyalari silindi...";
} else {
die ("Gecersiz bir secenek girildi...");
}
?>


voyager.php







include_once 'DB.php';
include_once 'LoadConfig.php';


$config = LoadConfig ('config.txt');


//Submitted data is $query -- Users search term


$dbconn = array ( 'phptype' => $config[dbtype],
'username' => $config[User],
'password' => $config[Password],
'database' => $config[database_name],
'hostspec' => $config[Host]);
$dbh = DB::connect($dbconn);


if (DB::isError ($dbh)) {
die (sprintf ('Error [%d]: %s',$dbh->getCode(),$dbh->getMessage()));
}


$stmt = 'SELECT * FROM sites_table ';
$stmt .= " WHERE keywords LIKE '%$query%' OR description LIKE '%$query%'";
$stmt .= " OR filename LIKE '%$query%'";


$sth = $dbh->query ($stmt);




if (DB::isError ($dbh)) {
die (sprintf ('Hata [%d]: %s',$dbh->getCode(),$dbh->getMessage()));
}


$count = $sth->numRows ();


$header = ($count > 0) ? "Sorgunuza uyan $count tane sonuc bulundu." :
'Uzgunum sorgunuza uyan herhangi bir kaynak sitemizde yer almiyor.';


function result_set () {
global $sth;
while ($row = $sth->fetchRow()) {
?>






}
}
//$dbh->close ();
?>




<br /><?php echo $header; ?><br />











if ($count) {
result_set();
} else {
echo $header;
}
?>



Sitede bulmak istediginiz anahtar kelimeleri yaziniz :






config.txt



dbtype:mysql ; SQL Server Type
Host:localhost ; SQL server location
User:turkphp_user ; SQL username
Password:****** ; SQL Password
database_name:turkphp_veritabani ; Name of the Database
filters:html,htm,php,php3,php4 ; Allowed File endings.
saveresults:yes ; Save the results of each succesful indexing
basedir:/home/turkphp/public_html ; Base directory where files are held
LoadConfig.php





function LoadConfig ($filename,$seperator=':', $comment=';')
{
$regex = "/$comment.*/i";
$fp = @fopen ($filename,'r');
if (!$fp) {
die ("Cannot open $filename");
}


while ($line = @fgets ($fp,1024)) {
$line = preg_replace ($regex,"",$line);
list ($key,$val) = explode ($seperator,$line);


$key = trim ($key);
$val = trim ($val);


$config[$key] = $val;
}


@fclose ($fp);
return ($config);
}
?>
Sayfa başına dön
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz