Kategoriler
Genel Konular

Php ile mysql sunuculari ayri ise mysql deki…

Php ile mysql sunuculari ayri ise mysql deki current timestamp olayina dikkat etmeniz gerek. Cunku mysql sunucusundaki current timestamp degeri php sunucunuzdaki ile ayni olmayabiliyor. Eger phpde bu konuda bir karsilastirma yapiyorsaniz sorun yasamaniz olasidir..

Php time ve mysql Current timestamp

Kategoriler
Php uygulamalari Php ve mysql Webmaster yardım

Php ile sql cache uygulamasi: Sisteminizi rahatlatin, sitenizi hizlandirin!

Sql cache, file cache ile nerdeyse ayni mantiga sahip bir php cache uygulamasidir. Tek farki sql cache verileri disk uzerinde degil mysql tablolarinda tutmasidir. Bunun file cache’ye gore bir cok artilarinin oldugunu dusunuyorum. Cunku bazi olumsuz durumlar file cache yapisinin iyi sekilde calisamamasina neden oluyor. Ornegin kullandiginiz hostun yada sunucunun disk yapisinin veya yazma hizinin dusuk olmasi cache sirasinda yavaslamalar ve optimasyon sorunlari yasamasina neden olur. Ozellikle SATA diskler uzerinde bu biraz daha gozle gorulur derecede kendini hissettirmektedir. SSD ve sas disk yapilari file cache icin en uygun olanlari ancak bunun eksikliginde sizlere sql cacheyi tavsiye edecegim. Mysql yapisi hizli islem yapmaya cok musait, file cacheden daha hizli ve aktif sekilde kullanim alani yaratir size.

Normalde localhostda sql cache yazisi icin denemeler ve testler yapiyordum, bunun icin bir kalip hazirladim, bu kalibi kullanarak birden fazla alan icin cache olusturabilirsiniz. Hazirladigim kalipda sadece cache alinacak alanin ismi ve cachede bekletilecegi suresini girmeniz yeterli olacak. Ve cache alinacak alanida belirttikten sonra hic ellemeden zamani geldiginde o bolum kendini guncellemis olacak. Mantik olarak cache alinan alanin ne kadar cachede kalacagi ve ne kadar ayni sorgunun gosterilecegini belirtebiliyoruz. boylece cache almadan onceki 50,100lerce sorguyu tek sorguya indirgemis olacagiz.

Uygulama iki bolumden olusuyor:

1: Fonksiyon bolumu, sizin duzenlemenize gerek olmayan bolum.

2: Cache icin kullanacaginiz kalip kod yigini.

Anlatima baslarken bunun biraz karisik gelebilecegini ancak mantik yuruttugunuzde gayet basarili bir calisma oldugunu anlayacaksiniz. Ayni tarz sistemi ayri tablo acmadan, sadece hazirladigim kod yiginini kullanarak wordpress de de istediginiz alani (buyuk sorguya neden olan yerleri) cache ye alabileceksiniz ki bu wordpress icin olan dokumani bir sonraki yazimda yazacagim.

Oncelikle kodu uygulayacaginiz sayfada mysql baglantisinin saglanmis olmasi gerekli, eger mysql baglantisi saglanmamis ve yeni basliyorsaniz asagidaki mysql baglanma kod yapisini kullanabilirsiniz, tabi oncesinde bu islem icin database olusturmaniz gerekli, yada var olan databaseye baglanti acmaniz gerekli asagidaki kod ile:

$conn = mysql_connect("localhost", "KULLANICI", "SIFRE");

if (!$conn) {
echo "baglantida sorun var: " . mysql_error();
exit;
}

if (!mysql_select_db("DATABASE")) {
echo "kullanilamiyor bu database: " . mysql_error();
exit;
}

Kendinize gore duzenlemeyi unutmayin.

Bu islemin hemen ardindan cache verilerini tutacagimiz tablomuzu mevcut databasemize eklememiz gerekli. Asagidaki kodu phpmyadmin den sorgu kismindan uygulayin:

CREATE TABLE IF NOT EXISTS kuaza_sqlcache (

id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
cache_ismi varchar(64) NOT NULL DEFAULT '',
cache_icerik longtext NOT NULL,
cache_zamani varchar(30) NOT NULL DEFAULT '',
cache_suresi int(10) NOT NULL DEFAULT '60',
PRIMARY KEY (id),
UNIQUE KEY cache_ismi (cache_ismi)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

Sorguladiginiz bu tabloya cache alanlari icin bize gerekli olan bilgileri kaydedecegiz, ve tekrar sonrasinda ekrana yazdiracagiz.

Simdi sira fonksiyonlarimiza geldi. Normalde fonksiyonlari kullanmamistim testlere ilk basladigimda, ancak hem kolaylik saglamasi hemde yeni arkadaslarin fonksiyonla olan baglarini guclendirmek adina boyle bir yol sectim. Hemde cache alacagimiz kalip kod yigini daha temiz ve sade bir duruma geldi. yinede bunu yazdigima bakmayin, anlayanlar icin basit, anlamayanlar icin biraz fazla gorunebilir :)

Bu fonksiyonlari ister ayri sayfadan, istersenizde cache alacaginiz sayfada bir yere ekleyin. Eger coklu bir sistemde calisiyorsaniz her sayfaya include ettiginiz belli dosyalariniz vardir, bu include ettiginiz dosyanin icerisine eklemeniz daha mantikli olacaktir.

/* Cache kontrol alani, buradan once kontrol yaptirip, sonrasinda gerekli islemlere baslayacagiz. */
function c_cachekontrol($cacheismi,$bilgiiste=""){
$sorgu=mysql_query("select cache_ismi,cache_icerik,cache_zamani,cache_suresi from kuaza_sqlcache where cache_ismi = '$cacheismi'");
$bilgi = mysql_fetch_array($sorgu);
if($bilgi > 0)
{
if($bilgiiste == "cache_zamani"){
return $bilgi["cache_zamani"];
}elseif($bilgiiste == "cache_suresi"){
return $bilgi["cache_suresi"];
}elseif($bilgiiste == "cache_icerik"){
return $bilgi["cache_icerik"];
}
}else{
return "tabloyok";
}
}

/* eger mysql tablomuz yoksa yeni tablo ve cache alinan kodlari tabloya yazdiracagiz,
boylece sonraki calistirmamizda bu kaydettigimiz tablodan cache alinacak.
*/
function c_yenicacheac($cacheismi,$cacheicerik,$cachesuresi="60"){
$alhepsini = $cacheicerik;
$zaman = time();
$yeniekle = mysql_query("INSERT INTO kuaza_sqlcache
(cache_ismi, cache_icerik, cache_zamani, cache_suresi)
VALUES ('$cacheismi', '$alhepsini', '$zaman','$cachesuresi')");
/*
Bu alanida sorgunun gerceklesip gerceklesmedini arka planda yani kullanici arayuzunde gostermeden ekrana basiyoruz.
Bunu gormek icin kaynak kod kismina bakmaniz yeterli olacaktir.
*/
if($yeniekle) {
return "";
} else {
return "";
}
}

/* Eger cache suresi belirledigimizden eski ise bu alan ilede varolan cache alanini guncelliyoruz. */
function c_cacheguncelle($cacheismi,$cacheicerik,$cachesuresi="60"){
$alhepsini = $cacheicerik;
$zaman = time();
$guncelle = mysql_query("UPDATE kuaza_sqlcache SET cache_icerik = '$alhepsini', cache_zamani = '$zaman', cache_suresi = '$cachesuresi' WHERE cache_ismi = '$cacheismi'");
/*
Bu alanida sorgunun gerceklesip gerceklesmedini arka planda yani kullanici arayuzunde gostermeden ekrana basiyoruz.
Bunu gormek icin kaynak kod kismina bakmaniz yeterli olacaktir.
*/
if($guncelle) {
return "";
} else {
return "";
}
}

Kod icerisinde ki alanlari anlayabileceginiz sekilde yorumlamaya calistim.

Simdi ise en can alici noktaya geldik diyebilirim. Cache almamizda bize en cok yardimci olacak alanlardan birisi, kalip kod yigini alanina geldik. Bunu sisteminize entegre etmeyi basardiginiz,da sonraki uygulamalarda zorluk cekmeyeceginize eminim. Bir kere yapan, sonraki eklemelerde zorlanmayacaktir.

Kod icerisinde gerekli aciklamalari yaptim, ancak sonrasinda da olayi daha iyi kavrayabilmeniz icin onemli bolumleri detayli sekilde yazacagim:

/*
cacheye alacaginiz bolum icin bir isim girin, 
boylece birden fazla alani cache alacaginizda farkli isimlerle 
yeni alanlar acabilirsiniz.
*/
$cacheismi = "cachedeneme4"; 

/*
Cacheye aldiginiz kodlarin ne SIKLIKLA yenilenecegini,
guncellenecegini buradan belirtebilirsiniz. Dakika cinsinden bir sayi girmeniz yeterli.
5 = 5 dakika, 60 = 1 saat.
*/
$cachesuresi = "160";

/*belirledigimiz cache ismini kontrol ettiriyoruz, varsa sonraki islemlere geciyoruz, yoksa yeni alan girip cache bolumu olusturuyoruz.*/
$bilgi = c_cachekontrol($cacheismi);

/* if ile daha once cache tablosunun acilip acilmadigini kontrol ediyoruz, eger tablo var ise sonraki adima geciyoruz. */
if($bilgi != "tabloyok"){

/* Buradan bize yardimci olacak cache zamanini ve belirlediginiz suresini aliyoruz. */
$db_cache_zamani = c_cachekontrol($cacheismi,"cache_zamani");
$db_cache_suresi = c_cachekontrol($cacheismi,"cache_suresi");

$cachetime = 60 * $db_cache_suresi; // 60 ile belirledigimiz cache suresini carparak suanki zamandan cikartacagiz, bir sonraki adimda.

/* 
if ile cachelenen icerigin zamanini hesapliyoruz ve 
daha once belirttigimiz dakikadan daha az ise (yani cache zamani icerisinde ise) cache zamani, 
direk cacheli alani ekrana yazdiriyoruz.
*/
if (time() - $cachetime < $db_cache_zamani) {

# cache belirttigimiz zaman icerisinde ise ekrana bastiriyoruz. Boylece tek sorguda hersey halletmis olduk.
echo unserialize(base64_decode(c_cachekontrol($cacheismi,"cache_icerik")));
echo "";
}else{
/*Eger cachenin suresi belirledigimiz dakikayi asmis ise, 
o zaman burdan yeniden normal kodlarimizi calistiriyoruz ve 
cache alanini guncellemesini sagliyoruz. */
ob_start();




// Cachelenecek kodlar ve sorgular alani (aynisi)





/* Ekrana basilan alanin kodlarini html alarak, var olan tabloyu yeniden guncelliyoruz. */
 echo c_cacheguncelle($cacheismi,base64_encode(serialize(ob_get_contents())),$cachesuresi); 
 
 ob_end_flush();
 }
 /* Zaman kontrol if fonksiyonu alani bitti, daha once actigimiz ve 
 tablo var yok kontrolu yaptigimiz if icin else alanina geciyoruz
 */

 }else{
 /* Eger sql cache alaninda belirledigimiz isimde bir cache alani yoksa, 
 buradan kodlarin html yapisini alarak yeni cache alanini ekliyoruz. 
 */
 ob_start();




// Cachelenecek kodlar ve sorgular alani (aynisi)





/* Alinan html kodlari yeni eklenecek tablomuza ekliyoruz. */
 echo c_yenicacheac($cacheismi,base64_encode(serialize(ob_get_contents())),$cachesuresi); 

 ob_end_flush();
 }
 /* Ve gerekli if kontrolleri bitti, yaptigimiz sorgu sayilari 1000 ken 2 oldu, hayirli olsun :) */

Kodlarin icerisinde butun alanlarin ne islem ve ne fonksiyon gorevi gordugunu belirttim.

Yinede unutmamaniz gereken kalip kod yigini alanindaki “Cachelenecek kodlar ve sorgular alani (aynisi)” kismi ikiside ayni olacak, yani bu alana cache alinmasini istediginiz sorgularinizi, kodlarinizi girmeniz gerekli. Genelde yuksek soegular oluyor, 50,60 sorgu gibi, o zaman buradaki uygulama ile sorgu sayisi 2 ye kadar dusecektir. Boylece gerek acilislarda olsun, gereksede sonraki sayfa gezintilerinde sitenizde gozle gorulur hizlanma olacaktir. bunun yaninda sunucunuzu yada hostunuzu rahatlatmasida cabasi :)

Bu uygulamanin faydasi bir tek mysql sorgularinda olmuyor arkadaslar, sistemi zorlayacak php sorgularinda veya fonksiyonlarinda da cache alma islemi uygulandigi icin ciddi derecede sisteminizi rahatlatacaktir.

Sitenizin hizlanacaginida hesaba katarsaniz hem kullanici sitenize girdiginde keyifli zaman gecirir, hemde arama motorlari icin cazip bir alan haline gelir. Guncellik konusuna deginmiyorum, orasi size bagli. Ancak hic bir kullanici, siz bile bir sayfanin acilmasini 5 saniye beklemek istemezsiniz :)

Uygulamayi gelistirmeye yetecek zamanim olursa el atar arada bir yenilikler eklemeye calisirim, bunun haricinde gelistirme amacli kodlari kullanacak arkadaslara simdiden basarilar diliyorum. Anlamadiginiz bir yer olursa konu altindan yorum ile beni uykumdan edip, pc basina cagirabilirsiniz.

Sevgiyle kalin, bol kodlu gunler :)

Kategoriler
Centos hakkında Günlük hayat Linux Web sunuculari Nginx Webmaster yardım

Centos sunucularda panelsiz Websunucusu (php, mysql) ve NGINX kurmak, yonetmek!

Sunucu bazli yardimsal makalelerime hizlica devam ediyorum arkadaslar. Bu yazimda size panelsiz olarak websunucusu kurmayi anlatacagim.

Bu anlatimla neler yapabileceksiniz ?:
* Bir websunucunuz olacak (apache)
* php uygulamalarini calistirabileceksiniz
* Mysql veritabani yonetim yazilimini kuracagiz.
* BIND (dns) kuracagiz (ama calistirmayacagiz)
* Yeni domain eklemeyi, web tarayicisi ile bu domaine erismeyi ogreneceksiniz.
* Bu islemlerden sonra NGINX ile daha hizli bir websunucusu kuracagiz.
* Yardimci olabilecek modulerede yer verecegim.

Makale sirasinda bize gereken programlari bilgisayariniza indirip kurun:
* Winscp (Windows ortaminda sunucunuza erismenizi ve kolayca duzenleme yapabilmenizi saglar, bir ftp programi gibi)
* Putty (ssh ile sunucuya erismemizi ve unix ortaminda programlari kurmamizi saglayacak)

Gerekli olan programlari kurup actiktan sonra sunucunuza baglanin, bundan sonraki anlatim bunu dusunerek anlatilacaktir..

l: Websunucusu apache dahil bize yardimci olacak php, mysql ve bind modullerini kuralim
Ssh programimizi acalim (putty), ardindan asagidaki kodu yazarak onaylayin:

yum -y install httpd php mysql bind mysql-server php-mysql

Bu islemden sonra sunucumuza apache http websunucusu, bunun yaninda dns uygulamalariniz icin yonetmenize imkan verecek bind (named), php ve mysql, ve bunlarin bir arada derlenmesi islemi bitmis olacak..

A: Apache ve mysql programlarini, sunucunuza restart (reebot) atildiktan sonrada, otomatik baslatilmasi icin, asagidaki kodu sshden uygulayin:

/sbin/chkconfig httpd on
/sbin/chkconfig mysqld on

Apache’yi ve mysql’yi baslatalim:

service httpd start
service mysqld start

B: Mysql root sifrelerimizi olusturalim
mysql kurulduktan sonra sifre degistirilmesi gereklidir, bunun icin asagidaki kodu ssh ekranindan calistirin, ancak once SIFRENIZ kismini kendi yeni sifrenize gore degistirin, bu sifre mysql ye erismede kullanacaginiz guvenlik kodu olacak.

/usr/bin/mysqladmin -u root password 'YENI-SIFRENIZ'
/usr/bin/mysqladmin -u root -h test.kuaza.com password 'YENI-SIFRENIZ'

Restart atmak icinde asagidaki kodu kullanabilirsiniz:

service mysqld restart

C: Yeni domain ve dosyalari icin kullanici ekleme (kullanici izinleri dahil)
ilk olarak sunucunuzun IP adresine yada Hostname domainine girildiginde acilmasini istediginiz alanlari tanimlayalim. Bu ilk domain ekleme islemimiz olacak, dikkatlice takip edin, sonraki adimlarda yeni domain eklemek istediginizde ayni islemi tekrarlamaniz gerekecek.

Oncelikle Hostname (Ornek: test.kuaza.com) domaini icin kullanici ve izinlerini olusturalim: Bu hostname sunucunuzun ismi niteligindedir, asagidaki kodu ssh ile uygulayin:

useradd DOMAIN-ISMI

Ornek: useradd test.kuaza.com

Sonrasinda sunucunuzda /home/ dizini altina kullanici klasoru olusturulmus oldu. Sitemizin dosyalari bu klasor altinda yer alacak, ornegin: resim, html ve php dosyalariniz. Burada olusturulan kullanici klasorune chmod ayari verecegiz. Kullanici klasorunun chmod ayari 711 olmali. Ornek resimdeki gibi:

Simdi /home/ klasoru altinda olusturulan yeni kullanici klasoru icine girin ve asagidaki isimlerde 2 tane klasor olusturun: bunu winscp programi ile yapin.

public_html
logs

Sonrasinda sag tik yapin acilan listede en altdakini secin: Properties ‘i secin: Bu kisimda klasorlere kullanici izinlerini verecegiz, boylece icerisine yukleyecegimiz dosyalara tarayicimiz ile erisim mumkun olacak. Ornek Winscp ile asagidaki resimdeki gibi yapabilirsiniz: Group ve Owner kisimlarini ayni secin, root olmamasi gerek, secmek icin tiklayin orda diger kullanici ismi cikacaktir, onu secin, ornek resimde mevcut. Eger root secili ise tarayici ile dosyalariniza erismek mumkun olmayacaktir:

Simdi public_html kalasoru icine ornek bir resim, php yada html dosyasi yukleyin, bu dosya deneme yaparken calisip calismadigini anlamak icin kullanacagiz.

D: Apache konfigurasyon dosyasina domain ile bilgileri girelim:
Bunu yapmamiz gerekli, cunku gelen istekleri apache hanki klasore yonlendirecek bunun tanimlamasini girecegiz.

Bu ayarida C: anlatimi kisminda oldugu gibi her domain ve kullanici eklendiginde yapmaniz gerekli. Cunku apachenin domain calistirilmak istendiginde hangi klasoru acacagini belirlememiz gerekli, aski halde siteye girilmek istendiginde apache standart dosyasi acilacaktir.

Apache yapilandirma dosyasini acalim (winscp ile): /etc/httpd/conf/httpd.conf

Bunu aratin ve bulun:

#NameVirtualHost *:80

Bu sekilde duzeltin: 

NameVirtualHost SUNUCU-IP-ADRESINIZ:80

Eger sunucunuzda birden fazla ip belirlemek istiyorsaniz altina yeni IP yi asagidaki sekilde eklemeniz gerekli:
NameVirtualHost YENI-SUNUCU-IP-ADRESINIZ:80

Bunu her yeni IP icin yapmaniz gerekli.

Sonrasinda en alta gelerek her domain icin ayri ayri ekleyecegimiz asagidaki kodlari ekleyin:

ServerName test.kuaza.com
ServerAlias www.test.kuaza.com

##Domain ve dosyalar icin kok dizin belirliyoruz
DocumentRoot /home/test.kuaza.com/public_html
##Domain ve dosyalar icin kok dizin belirliyoruz

ServerAdmin kuaza.ca[AT]gmail.com
UseCanonicalName Off

## Hata dosyalarinin tutulacagi yeri belirtiyoruz
ErrorLog /home/test.kuaza.com/logs/test.kuaza.com-error_log
CustomLog /home/test.kuaza.com/logs/test.kuaza.com-access_log common
## Hata dosyalarinin tutulacagi yeri belirtiyoruz

##Bu kisim useradd XXX diye belirledigimiz domaine ozel kullanici izinleri

suPHP_UserGroup test.kuaza.com test.kuaza.com

SuexecUserGroup test.kuaza.com test.kuaza.com

##Bu kisim useradd XXX diye belirledigimiz domaine ozel kullanici izinleri

Bu kodu her domain ekleyeceginiz zaman kopyalayarak yeni domaine uyarladiktan sonra en alta ekleyin. Bunu hostname domaini ve ip adresiniz icinde uygulayin, boylece ip adresini adres satirina girerek ulasmak istendiginde istediginiz bir sayfayi actirabilirsiniz. aksi halde ilk tanimladiginiz domain acilacaktir IP adresi ile girilmeye calisildiginda :)

Bu ayardan sonra apache sunucusuna restart atalim:

service httpd restart

Eger bir hata vermez ise sorunsuz sekilde domaini adres satirindan calistirdiginizda acilacaktir.
Ornek: http://test.kuaza.com
Ornek resim:

Gordugunuz gibi bu adimlardan sonra panelsiz olarak websunucumuz hazir oldu, calisiyor. Suanda BIND yani dns yonetici uygulamasi isimize yaramiyor, daha dogrusu baslatmadik. Baslatsakta calismaz, hata verecektir, cunku konfigurasyon dosyasi ve sunucuda bagli domainler icin yapilandirma dosyalari olusturmamiz gerekli. bu suan icin gerekli degil, cunku gelismis ozellikleri kullanmak isterseniz yapmanizi tavsiye ederim. Ornegin webmail, yeni ns olusturmak, Domaine ozel ip belirlemek gibi. Ilerleyen donemlerde zamanim olursa BIND (dns zone) uygulamasi hakkinda da makale yazacagim, bu makaleye hitafen.

Sizde artik panelsiz olarak sunucunuzu kurabilir, yonetebilirsiniz.

2: Panelsiz sunucuda NGINX kurulumu
Sunucumuzu nginx ile guclendirerek daha hizli ve rahat bir sunucu hazirlayabiliriz. Apache tek basina yuksek hitli sitelerde bunun altindan kalkamayabilir. Cunku apache her dosya icin yeni bir slot yani islem baslatir. Bu statik, resim, html,css,js gibi dosyalarida icerir. Buda kisa surede apachenin uygulayacagi islem gucunun dolmasina neden olur. cogu zaman bu islem gucu asildiginda sitenize ulasilamama, gec acilma gibi bir cok sorunla karsilasirsiniz. Ancak Nginx websunucusu ile statik dosyalarin islenmesi cok daha kolay olur ve apache ye diger uygulamalari calistirmak icin alan ve islem gucu saglanir. isterseniz panelsiz bir sunucuda nginx kurulumu icin detayli bir dokumanin anlatimina baslayalim :)

Oncelikle nginx’i yum yardimi ile kuralim: Nginx derlemesi yum deponuzda olmayabilir, bu yuzden asagidaki adimlari takip edin.

Sunucunuza uygun olani secin ve ssh den calistirin:
CentOS 5

rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm

CentOS 6

rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

Kendinize uygun olan kismi uyguladiktan sonra nginx otomatik kurulum dosyasi yum depolarina eklenmis oldu, ilk kullandigimiz kurulum kodunu tekrar sshden calistiralim:

yum install nginx

Bunun ardindan nginx’in kurulmus olmasi gerekli. Bu adimdan sonra tek yapacagimiz sey hesabimizdaki domainleri tanimlamak.

Orjinal kurulan nginx konfigurasyon dosyasinda cogu sey belirtilmemistir ve eksiktir. Ozellikle nginx in gzip ozelligi bile acik degildir ve bununla beraber cogu faydali ozellikleri acmak icin asagidaki islemleri sshden uygulayin:

rm -rf /etc/nginx/nginx.conf
cd /etc/nginx/
wget www.makaleci.com/dersler/nginx/nginx.conf

Bu islemden sonra hesabimizdaki siteleri nginx’e tanitalim. Bunun icin her siteyi ayri ayri tanitacagimiz konfigurasyon dosyasini acalim (winscp ile):

/etc/nginx/conf.d/default.conf

Dosya icerisindekileri komple silin ve asagidakileri ekleyin:

server {
access_log off;
error_log /var/log/httpd/nginx.errors.DOMAIN.com.log warn;
listen 80;
server_name DOMAIN.com www.DOMAIN.com;

# Nginx'in calistirmasini istediginiz statik dosya uzantilarini belirleyin.
location ~* .(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|js|css)$ {
root /home/DOMAIN.com/public_html; # Burda domaine ait kok dizini belirtiyoruz.
}

location / {
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 4k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

proxy_connect_timeout 30s;

proxy_redirect http://www.DOMAIN.com:81 http://www.DOMAIN.com;
proxy_redirect http://DOMAIN.com:81 http://DOMAIN.com;

proxy_pass http://DOMAIN-IP ADRESI:81/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Sonrasinda icerisinde goreceginiz BUYUK harfle yazdigim yerleri nginx’e tanitacaginiz domaine gore duzenleyin.
NOT: Bu kod kalibini her domain icin ayri ayri, alt alta ekleyerek yeniden eklemeniz gerekli. Yani her domain icin bu kalibi kullanin ve alt alta ekleyerek kaydedin.

E: Ilk acacagimiz domaini belirttikten sonra bu ayar ile apache’yi acalim ve port ile tanimladigimiz domaine ozel bolumu nginx icin duzenleyelim.

Apache yapilandirma dosyasini acalim (winscp ile): /etc/httpd/conf/httpd.conf
Bunu aratin:

Listen 80

Bununla degistirin: 

Listen 81

Sonrasinda ekledigimiz sunucu ve domain ip lerinin sonundaki port numarasini nginx e yonlendirecegimiz port ile degistirelim:
Bunu aratin:

NameVirtualHost SUNUCU-IP-ADRESINIZ:80

Bununla degistirin: 

NameVirtualHost SUNUCU-IP-ADRESINIZ:81

 

Ve domain kisimlarindaki portuda 81 ile degistirin. Yukarida apache kurulduktan sonra domaini belirttigimiz kod kismi var, en sonda olmasi gerekli. O koddaki 80 kisimlarinida 81 ile degistirecegiz.

Her domain icin ayridir, BULUN:

<VirtualHost IP-ADRESI:80>

DEGISTIRIN:

<VirtualHost IP-ADRESI:81>

Yani kisaca arkadaslar apache yapilandirma dosyasi icindeki acik olan :80 portunu :81 ile degistiriyoruz. Boylece Domaine gelen istekleri NGINX e gondermis olacagiz.

F: mod_rpaf kurulumu
Oncelikle mod_rpaf kurulumu icin gerekli olan uygulamalari yum yardimi ile kuralim:

yum install httpd-devel gcc

Sonrasinda mod_rpaf i kuralim ve derleyelim:

cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Sonrasinda tekrar apache konfigurasyon dosyasini acalim: /etc/httpd/conf/httpd.conf

Aratin: 

LoadModule

 


Bu kismi buldugunuzdan emin olur, apache modullerinin listesini goreceksiniz, alt alta 20-30 tane olmasi gerekli. Bu listenin en sonuna, bir satir asagiya gecip asagidaki kodu ekleyin:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
# mod_rpaf Konfigurasyon alani, Sunucunuzda bulunan IP adreslerini eklemeyi unutmayin
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.0.0.1 SUNUCU-IP-ADRESI
RPAFheader X-Forwarded-For

 

Sunucunuzda kac tane ip adresi belirlenmis ise bunlari SUNUCU-IP-ADRESI kismina ve her birini bir bosluk birakarak ard arda ekleyin., Kaydedip cikin.

G: PCRE kütüphanesini Yüklemek (Guncel versiyon: pcre 8.20)

Son sürümü buradan indirebilirsiniz:

cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.20.tar.gz
tar xvfz pcre-8.20.tar.gz
cd pcre-8.20
./configure

Sanirim suanda herseyi sorunsuz halletmissinizdir, yani umuyorum :) Asagidaki son adimida uygulayarak ayarlari duzenledigimiz modullerle birlestirelim, etkinlestirelim:

Apache restart atalim:

service httpd restart

Nginx restart atalim:

service nginx restart

Bu adimlardan sonra eklediginiz domaini adres satirindan acarak gozlemleyin, aciliyorsa guzel. acilmiyorsa atladiginiz bir yer var yada yaparken hata almis, hata yapmis olabilirsiniz. Eger nginx in calisip calismadigini kontrol etmek istiyorsaniz bu siteye girerek sorgulatin.

Server kismindan nginx ve versiyon numarasini goruyorsaniz sorunsuz sekilde nginx calisiyor demektir. Tabi en ustdeki kisminda boyle olmasi gerekli: HTTP/1.1 200 OK =>

Ornek calisma ve testler sirasinda kullandigim domaini sorgulattigimda cikan sonuc:

3: Panelsiz sunucuda Mysql kullanimi= Mysql database olusturma, kullanici olusturma, database silme
Sitelerimize erisiliyor, php, html dosyalarimizda calisiyor, nginxde sorunsuz olarak isliyor. O zaman gelin bir wordpress sitesi kuralim :) Ama once mysql database ve kullanici olusturmamiz lazim, bunu bir cozelim once :)

SSH panelimize girelim (putty), ardindan asagidakini yazip enter yapin: (mysql’ye baglanalim)

mysql -u root -p

Ardindan mysql sifrenizi isteyecek sizden, dokumanin baslarina dogru mysql sifrenizi yenilemeyi gormustunuz, burda yaptiginiz sifreyi yazip enter yaparak mysql programina baglanin.

Sonrasinda asagidaki kodu kullanarak database olusturalim:

CREATE DATABASE db-isminiz-buraya;

db-isminiz-buraya: bu kismi olusturacaginiz database ismi ile degistirin ve enter yapin, sonrasinda asagidaki gibi bir mesaj cikacak, bu islemi dogru yaptiginiz anlamina gelir, aksi halde hata yapmissiniz demektir:

Query OK, 1 row affected (0.00 sec)

Simdide Database adina kullanici ve sifre belirleyelim:

GRANT USAGE ON db-isminiz-buraya.* to [email protected] IDENTIFIED BY 'db-sifreniz-buraya';

db-isminiz-buraya: az once olusturdugumuz db ismi aynen yazin.
db-kullanici-adiniz-buraya: database icin kullanici adini yazin.
db-sifreniz-buraya: Olusturdugunuz kullanici icin sifre belirleyin.

Ve Database ile kullanici ismini birbirine baglayalim:

GRANT ALL ON db-isminiz-buraya.* to [email protected] ;

db-isminiz-buraya: az once olusturdugumuz db ismi aynen yazin.
db-kullanici-adiniz-buraya: database icin kullanici adini yazin.

Olusturdugunuz bir datebaseyi silme:

DROP database db-isminiz-buraya;

db-isminiz-buraya: Silmek istediginiz db ismi aynen yazin.

Bu islemlerin her kademesinde Query OK seklinde cikti verecek, bu sorunsuz islemleri hallettiniz anlamina gelecektir. Suanda database ve kullanici hesaplarini olusturmus olduk. Artik wordpress kurarken db bilgilerini istediginde yukarida yaptigimiz kullanici adi, database adi ve sifreyi kullanabilirsiniz..

Arkadaslar dokumani hazirlamak bekledigimden uzun surdu. Bir ara sizofreniye baglamaya baslamistim. Sanirim 2-3 gundur uzerinde calisiyorum. Bu test icin 2 vds ile calistim, bu vdslerin sponsorlugunu saglayan kisi ve kurumlar ile ilgili yakin zamanda bir yazi yazacagim, burdan hepsine gonulden tesekkur ediyorum.

Galiba biraz yoruldum, dinlenme moduna gececegim. Dokumanda gozunuze carpan bir yanlislik, hata varsa yorum olarak yazmanizi rica ediyorum. Ayrica kurulum yapmaya calisan arkadaslar, olaki bir sorunla karsilasirsaniz lutfen yorum birakin, dokumani en iyi haliyle guncellemeye calisacagim.

Dokumanda Turkce karakter kullanamiyorum, klavyemden oturu, epey uzun ve yorucu oldugu icinde Turkce karakterleri duzeltmeye zamanim yok. Bu konuda anlayis gostereceginizi umuyor, arkamdan kufretmeyeceginizi dusunuyorum :)

Kategoriler
Amo-Seo-PR Php ve mysql Webmaster yardım

Php ve Mysql ile dinamik sitemap sayfalari hazirlamak

Genelde Hazir sistemler icin eklentiler yada moduller bulunur bu tarz uygulamalar icin. Gunumuzde artik sitemap uygulamasi olmayan site neredeyse cok az, ve olmasi gereken bir sey haline geldi. En buyuk sebeplerinden biriside arama motorlarinin sitenizin iceriginden daha cabuk ve hizli haberdar olabilmesidir.. Php ve mysql kullanan sistemler icin eger iceriginiz cok fazla degilse sitemap generator sitelerini kullanarak sitemap olusturabilirsiniz, ancak devamli guncellenen ve artik site iceriginizdeki sayfalar 50-100 bin’i gecmeye basladiginda sitemap generator siteleri artik size yardim edemeyecektir. cunku cogu belli bir limite kadar izin veriyor, daha fazlasi icin ucret istiyorlar. Ancak basit bir kac uygulama yazarak bunu hem otomatik, hemde basite indirgeyerek google ve dengi arama motorlari icin sitemizi daha cazip hale getirebiliriz..

Kategoriler
PhpKF Forum Web Site Tanıtımları Webmaster yardım

Türk yapımı php+mysql forum sistemi (PhpKF)

Bu yazimda sizlere tamemen turk yapimi bir forum sistemi olan PhpKF hakkinda bir kac sey yazacagim. Bunlarin basinda devamli olarak acik kaynak ve Turk projelerinin desteklenmesi gerektigini belirtmek istiyorum. Pardus gibi bu sistemde acik kaynak ve grur listemizden. Simdi uzun suredir bildigim ama ancak detayli incelemeye zaman ayirabildigim phpKF ‘nin gercekten cok basarili bir calismanin urunu oldugunu soylemek istiyorum. Bir cok ucretli forum sisteminin dengi niteliginde.

PhpKF hakkinda daha fazla bilgiye buradan ulasabilirsiniz. Sistemi denedigimde gercekten hizi ilk gozume takilan konu oldu. Nasil bir kodlama, nasil bir cache sistemi var bilmiyorum ama paralis atilan bir cok forum sisteminden cok daha verim alabileceginiz bir alt yapiya sahip.

Anladigim kadariyla 3-4 yildir gelistirme asaminda ve devamli gelistirilmeye devam ediyor. Bu sistemin ilk zamanlarini hatirliyorumda suan geldigi nokta gercekten etkileyici. Bence gelistirici arkadaslarinda katki saglayabilecegi ve adini tum dunyaya duyurabilecegi bir sistem olabilir. Bunun icin sizde yeni bastan bir forum sistemi yazmak yerine phpKF catisi altinda gelistirici niteliginde calisabilirsiniz. Script yazarinin buna hayir diyecegini dusunmuyorum acikcasi.

Forum sisteminden bahsetmek gerekirse baslica ozellikleri tema desteginin olmasi, eklenti desteginin olmasi, portal sisteminin olmasi, profesyonel forum sistemlerindeki bir cok ozelligi icerisinde barindirmasi, yonetim paneli, uyelik, paneli forum yonetimi bir cok konuda ihtiyaclari karsilayabilecek duzeyde. Birgun MJ de de kullanmak istedigim bir sistem :)

Bu sorum sistemi beni cok memnun etti gercekten. Grurlanmayi kenara birakip sistemin cok iyi islemesi ve hizi: Vay canina! dedirtir cinsden. Bu yapinin bir parcasi olmak bence guzel olurdu. Suanki durumum da benim icin zor gibi gorunebilir ama php bilen veya gelistirmek isteyen arkadaslarimizin bu sistem uzerinde de eklenti, tema gibi uygulamalar hazirlamasi cok iyi olurdu.

Son olarak phpKF yi bize kazandiran arkadaslara cok tesekkur ederim, destek sitesinde yazan isimleri bu konu altinda da yayinlayalim:
Sistemi Sıfırdan Kodlama ve Tasarım – Adem YILMAZ
Portal özelliği, tasarımı ve bazı grafikler – Yücel KAHRAMAN
SEO Özelliği – Gündüz Can YILMAZ

Bu listenin dahada artmasi dilegiyle, hepinize tesekkurler..

Kategoriler
Linux Web sunuculari Program Anlatımları Webmaster yardım

SSH ile Mysql veritabani yedegi alma, yukleme ve PuTTY hakkinda!

Daha once bu konuda yazmayi dusunuyordum ancak zaman azligindan ancak vakit bulabildim. SSH ile veritabani yedegi almak genelde buyuk veri tabanlari icin kullanilmaktadir. Sebebi web tabanli uygulama ile  geri yuklemenin zorluklar cikarmasidir. Genelde dusuk ayarlanmis yukleme limitler, guvenlik onlemleri nedeniyle phpmyadmin yada diger script tabanli uygulamalar ile yukleme yaparken sorun yasariz. Ancak buyuk veri tabani dosyalariniz varsa bunu ssh olmadan da yukleyebilirsiniz. bunun icin BIGDUMP uygulamasini kullanabilirsiniz. Bu konuya burada degindim. Oradan detaylara bakabilirsiniz, simdiki konumuz SSH ile veritabani yedegi alma ve geri yukleme..

Bunun icin sunucuya erisim hakkiniz olmali. Birde kullandiginiz isletim sistemi uzerinde sunucu ile SSH erisimi saglayabileceginiz bir program gerekli. Windows kullanicisi iseniz en yaygin kullanilan PuTTY programini kurmaniz gerekiyor. indirmek icin buraya tiklayin ve kaydedip acin.

PuTTY Nedir diye soracak olursaniz, kisaca aciklayalim: Sunucunuz ile terminal uzerinden baglanti kurarak yonetmenizi saglayan bir uygulamadir. Tamamiyle kod arayuzludur, yani bir isletim sistemi tarzinda uygulama beklemeyin, yapacaginiz birsey varsa bunu kodlar ile yapmaniz gerkecek. Genelde ileri duzey kullanicilar icindir, ancak yeni baslayanlarinda ogrenmesini tasiye ederim. sunucu sahibi birisinin devamli kullanacagi uygulamalardan bir tanesidir. Bu yuzden ileride olusacak sorunlara mudahale olsun, yeni eklemeler olsun herseye hazirlikli olmak icin SSH uygulamalarini iyi ogrenmeniz gerek. Neyse simdi size SSH yardimi ile sitelerinizin mysql veri tabanlarinin yedegini sunucumuza almayi, daha sonra istersek yeniden yuklemeyi anlatacagim.

PuTTY programini actiginizda asagidaki gibi bir ekranla karsilasacaksiniz:

Sunucu IP Adresi kismina sunucunuzun ip adresini yazacaksiniz. Sonrasinda baska ayarlari ellemeden Open e tiklayarak SSH terminalinin acilmasini saglayin. Gelen terminal arayuzunde sirasi ile sunucu kullanici adi ve sifrenizi gireceksiniz.

Kullanici adini girdikten sonra enter yapip sifre kismina gecin. Kullanici adi genelde root‘dur. Sifrenizi yazin ancak bir hareket beklemeyin yani sifre girme kisminda bir sey yazilmayacaktir, bu yuzden eksiksiz ve hatasiz sifrenizi girip enter tusuna basarak sunucu ile baglantiyi kuralim.

Baglantidan sonra asagidaki gibi bir ekranla karsilasacaksiniz. Resim ornektir.

Simdi size once veritabaninizin yedegini almayi anlatacagim. Sonrasinda tekrar geri yukleme konusunda aciklama yapacagim.

Problemsiz giris yaptiktan sonra asgidaki kodu kendinize gore duzenleyerek kopyalayin ve SSH terminali uzerinden mausunuzun sag tusuna basarak ekrana yapistirin.

Veritabani yedek alma kodu:

mysqldump --opt -Q -u KULLANICI_ismi -p DATABASE_ismi > /yedek.sql

/yedek.sql kismini kendinize gore duzenleyebilirisniz, nere yedek alacaginiz size kalmis. Ancak indirmek isterseniz sitenizin dizinini yazarak oraya yedek alin,s onra adres satirindan dosya ismini yazarak indirirsiniz. Ancak daha sonrasinda silin, database dosyaniz calinabilir..

Kodu yazip enter yaptiktan sonra sizden veritabani sifrenizi girmenizi isteyecek, sifrenizi girip enter yapin. Hata yazisi cikmadiysa yedegi sorunsuz almissinizdir demektir.

Bu uygulamanin birde tersi var, yani daha once aldiginiz .sql uzantili yedeginizi kolayca ve cok hizli bir sekilde geri yukleyebilirsiniz. Tabi veritabaninin bos olmasi gerek yoksa geri yukleme islemi tamamlanmaz hata verir.

Veri tabani geri yukleme kodu:

mysql -u KULLANICI_ismi -p DATABASE_ismi <  /yedek.sql

gerekli kisimlari duzenledikten sonra ozellikle /yedek.sql bolumunu yedegi nere aldiysaniz, yani yedek .sql uzantili dosya nerde ise ona gore duzenleyin, dosyayi bulamazsa geri yukleme islemi gerceklesmez, hata verir.

Bu islemden sonrada sizden veritabani kullanici sifrenizi isteyecek. Sifreyi girdikten sonra enter yapin, dosyaniz ve bilgilerinizde sorun yoksa yedek veritabanina geri yuklenecektir, ancak bilmeniz gerken veritabanin bos olmasi gerektigidir..

Bir sonraki yazimda WinSCP adli detayli sekilde sunucuya SSH baglantisi kurup dosyalarinizi yonetmenizde kolaylik saglayacak olan programdan bahsedecegim.

O zamana kadar kolay gelsin.

Kategoriler
Webmaster yardım

Mysql Optimizasyonu ve Query Cache Çalıştırmak – 1

Bazi durumlarda sunucumuz artik var olan sitelerin bindirdigi yuku kaldirmamaya baslayacaktir. Yukselen hitler, kullandigimiz script’in hatalari, sql sorgulari v.s derken bi bakmissiniz siteleriniz ayvaslamaya, sunucunuzda zorlanmaya baslamis. Sunucu optimizasyonu yapmaniz gerektiginde ilk oncelik cok fazla sql sorgusu kullaniyorsaniz eger mysql uzerinde olmalidir. Genel olarak mysql yi 1-2 gun boyunca inceleyip size sonuc dondurecek ve saglikli my.cnf ayarini verecek gerekli eklentiler mevcut ancak buna 2. seride deginecegim. Suanda basit yoldan sitelerimizde kullanilan sql sorgularini cache etmek icin mysql nin bir ozelligini acmayi gosterecegim..

Mysql optimizasyonu icin sunucunuzda bulunan my.cnf dosyasini kullanmamiz gerekli. Genelde default olarak icerisinde bir kac ayar mevcuttur, ancak bu standart oldugu icin ilerde sitemizin yukunu kaldiracak duzeyde malesef olamiyor. Cunku kullanilan script cok fazla sql sorgusu iceriyorsa siddetle SQL CACHE ayarlarini acmanizi tavsiye ederim. Bu Hem sitenizin acilisinda, hemde kullanirken bir hiz kazandiracagi gibi, sunucuda agirlasan yukun birazini sirtlayacaktir..

Oncelikle bu uygulamayi yapabilmeniz icin sunucu sahibi olmaniz gerek ve ssh baglanti izniniz olmali.. Baslamadan once duzenleme yaptiginiz dosyalari yedeklemeyi unutmayin.

Sunucumuzdaki my.cnf dosyasini aciyoruz. Bu genelde asagidaki yolda bulunur:
/etc/my.cnf (centos, cpanel ve plesk’de denenmistir)

bu dosyayi actiginizda icerisi bos ise yada belli kodlar varsa siz fazla kurcalamadan asagidaki kodlari [mysqld] sekmesinin altinda bir yere ekleyin:

thread_cache_size = 128
key_buffer = 256M
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 4M
table_cache = 1000

Cok fazla tablolu siteleriniz varsa table_cache = 1000 kismindaki sayiyi artirmanizi oneririm yada az ise azaltmanizi..

Bu ayarlari kendinize gore duzenleyebilirsiniz. Genelde her sunucu ayni ozelliklerde olmuyor. Eger ram ve sunucu ozelliginiz cok dusuk ise verilen limitleri dusurebilirsiniz. Ancak oncesinde sql cachede etkili olan kisimlarin aciklamasini yapmamiz gere, bundan sonrasinda mantikli sonuclar ile sunucunuza goze duzenleme yapabilirsiniz.

“key_buffer = 256M” kismi, Myisam index blokları icin kullanilir. Gelen istekler disk yerine hafizadan saglanir.

“query_cache_type = 1” kismi, cache’i açtığımızı belirtir. 0 yapınca kapatmis oluyoruz, ancak biz suanda 1 yaparak bu ozelligi aciyoruz.

“query_cache_limit = 4M” kismi, cachelenecek maximum sorgu limitini belirler, 4mb’a kadar olan sorgulari cache alarak hafizasinda tutar.

“query_cache_size = 128M” kismida toplamda cachelenecek dosyalar icin sunucuda kullanilacak maximum alani ifade eder. Artirabilirsiniz, yada dusurebilirsiniz..

“table_cache = 1000” kismi, tablolarin acilmasini ve okunmasini hizlandirmak icin daha once acilan tablolar icin cache olusturmasidir. Myisam tablo yapısında tum tablolar sorgu seklinde sunucuda tutulmaktadir, bunlarin acilip okunmasi gibi islemler icin cacheyi acmak bu sureyi daha hizlandiracagi icin faydasini gosterecektir..

Kullandiginiz sisteme gore inceleme yaparak my.cnf ayarlarini ozellestirebilirsiniz. Bunun icin onerecegim bir yolda hatali ve sorunlu sql sorgularini ogrenmektir. Bunun icin my.cnf dosyasina asagidaki kodlari ekleyerek verilen yolda toplanan hata loglarini inceleyip sorunlu sorgulari ogrenebilirsiniz:

log_slow_queries=/var/log/slow-queries.log
long_query_time=10
log-queries-not-using-indexes

Sonrasinda sorunlu sorgular icin scriptlerinizi optimizasyonudan gecirebilirsiniz.. Simdilik bu kadar yazinin diger serilerinde optimasyon hakkinda kullanilan terimler hakkinda da bilgi verecegim. Gerek kullanici tarafli yazilimlar, gerekse kullanilan scriptler hakkinda da optimasyon onerilerim olacak. Simdilik kolay gelsin..

Orjinal Kaynak…

Kategoriler
Php ve mysql

php mysql islemleri – ekleme, silme, duzenleme, listeleme !!

php2ek5arkadaslar bunu uzun zamandir yapmak istiyordum php konusunda

kendini gelistirmek isteyen arkadaslar icin guzel bir dokuman olacak eminim.. oncelikle dokuman su ana kadarki son sistemlerde denenmistir ve sorun gorulmemistir, (php 5 …), kullandigim vista sisteminde de denedim, localde yani.. dokuman gelistirilmeye acik, sorun olursa konu altinda yorum yazarak yardim alabilirsiniz.

aragida anlatilan kodlar kullanilarak gelistirilmeye baslanan bir veb sitesi ve temasi demosu:
Demo silinmistir :s
Yukaridaki demo’nun Kaynak dosyalari download:
http://www.kuaza.com/kuaza-tema-arsivi-f193/php-islemlerini-yapabilen-yeni-tema-50-bitti-t2244.html

yukaridaki link kuaza tema arsivi icin hazirlanan bir iceriktir, gelistirilmeye devam edilmektedir..
gorus ve onerilerinizi yazabilirsiniz..

simdi gel gelelim okumanimizin baslangicina oncelikle kendimize bir veritabani olusturuyoruz ve asagidaki bilgileri veri tabanindan olusturdugumuz veritabanina yukluyoruz..


CREATE TABLE `not_defteri` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `baslik` varchar(255) NOT NULL,
  `aciklama` varchar(255) NOT NULL,
  `resim` varchar(255) NOT NULL,
  `ekleyen` varchar(255) NOT NULL,
  `tarih` varchar(255) NOT NULL,
  `k_site` varchar(255) NOT NULL,
  `k_url` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=67 ;


— Tablo döküm verisi `not_defteri`

INSERT INTO `not_defteri` (`id`, `baslik`, `aciklama`, `resim`, `ekleyen`, `tarih`, `k_site`, `k_url`) VALUES
(1, ‘maffay’, ‘maffay hakkinda hersey :)’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 1’, ‘kuaza.com’),
(2, ‘baba nerdesin soyle’, ‘Bu site paylaşılan dosyaları içerisinde barındırmamaktadır,
dosyalar farklı kaynaklardan derlenip paylasılmaktadır ve sorumlulukları
tamamen kaynaklarına aittir.Hak sahibinin talebi durumunda paylasımlar
derhal sitemizden kaldırılacaktır.
Sitede verilen lin’, ‘http://www.kuaza.com/out/i45812_kk.jpg ‘, ‘pala’, ‘2009’,
‘bir kuaza olusumudur :)’, ‘kuaza.com’),
(3, ‘Baslik 3’, ‘Modern Kristallitler’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 3’, ‘kuaza.com’),
(4, ‘Baslik 4’, ‘Masa Lambalari’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 4’, ‘kuaza.com’),
(5, ‘Baslik 5’, ‘Aplikler’, ‘resim.png’, ‘kuaza’, ‘2008’, ‘site 5’, ‘kuaza.com’),
(48, ‘ne basligi’, ‘dfgdfgdfgdfgdfg’, ‘sdfsdfsd’, ‘fsdf’, ‘sdfsd’, ‘fsdf’, ‘sdfsd’),
(47, ‘kuaza.net php dersleri’, ‘aciklama icin zaman yok be guzelim’,
‘http://www.kuaza.com/out/i45657_image0011hk3rq3fb2iswp2.jpg’, ‘maffay61’,
’11-2-2008′, ‘ucretsiz resim yukleyin’, ‘kuaza.com’),
(66, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’, ‘Sonuçları şşüü’,
‘Sonuçları şşüü’, ‘Sonuçları şşüü’,
‘Sonuçları şşüü’);

 

sonrasinda baglanti bilgilerimizi iceren sayfamizi hazirlayalim…

baglan.php


<?PHP

$conn mysql_connect("localhost""root""");

if (!$conn) {
    echo 
"Unable to connect to DB: " mysql_error();
    exit;
}
  
if (!
mysql_select_db("deneme")) {
    echo 
"Unable to select mydbname: " mysql_error();
    exit;
}
mysql_query ("SET NAMES ‘latin5’ ");
?>

 

bu yukaidaki bilgileri kendinize gore gerekli yerlerini duzenleyin.. veri tabanina baglantimiz basarili olacaktir, sonrasinda ilk sayfamiz listeleme sayfamiz olsun, index sayfasinda veritabanimizdan gelen bilgileri listeleyelim..

k_index.php


<?PHP
require_once(‘baglan.php’);
?>
<table width="800px">
<tr>
<td bgcolor="gray">Sira</td>
<td bgcolor="gray">baslik</td>
<td bgcolor="gray">aciklama</td>
<td bgcolor="gray">resim</td>
<td bgcolor="gray">ekleyen</td>
<td bgcolor="gray">tarih</td>
<td bgcolor="gray">Site</td>
</tr>
<?php

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;

$result mysql_query($sql);

if (!$result) {
    echo 
"Could not successfully run query ($sql) from DB: " mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo 
"No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you’re expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you’ll
//    then create $userid, $fullname, and $userstatus

while ($row mysql_fetch_assoc($result)) {
    

$id=$row[‘id’];
$baslik=$row[‘baslik’];
$aciklama=$row[‘aciklama’];
$resim=$row[‘resim’];
$ekleyen=$row[‘ekleyen’];
$tarih=$row[‘tarih’];
$k_site=$row[‘k_site’];
$k_url=$row[‘k_url’];

?>

<tr><td><?php echo "$id"?></td>
<td> <?php echo "$baslik"?></td>

<td> <?php echo "$aciklama"?></td>
<td> <a href="<?php echo "$resim"?>" /> Resmi gormek icin tiklayin</a></td>
<td> <?php echo "$ekleyen"?></td>
<td> <?php echo "$tarih"?></td>
<td> <a href="http://<?php echo "$k_url"?>"><?php echo "$k_site"?></a></td>

<?php 

}

mysql_free_result($result);
?>
</tr>
</table>

 

yukaridaki listeleme sayfasina dikkat ederseniz oncelikle baglan.php sayfasini sayfamiza cagirdik sonrasinda gelen bilgileri degiskenlere atadik, ve alt tarafindaki tablolara yansittik..

simdide ekleme silme ve duzenleme sayfamizi yapalim..

k_islem.php


<style type="text/css">
<!–
.style1 {
    color: #FF8040;
    font-weight: bold;
}
–>
</style>
<form action="k_ekle.php" method="POST">
<table width="439" border="0">
  <tr>
    <td width="53" height="32"><span class="style1">Bolumler</span></td>
    <td width="370">&nbsp;<span class="style1">Doldurulmasi Zorunlu Alanlar</span></td>
  </tr>
  <tr>
    <td>Baslik</td>
    <td><input name="baslik" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>aciklama</td>
    <td><textarea name="aciklama" rows="10" cols="45"></textarea></td>
  </tr>
  <tr>
    <td>Resim</td>
    <td><input name="resim" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Ekleyen</td>
    <td><input name="ekleyen" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Tarih</td>
    <td><input name="tarih" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site ismi</td>
    <td><input name="k_site" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site url</td>
    <td><input name="k_url" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Ekle"/></td>
  </tr>
</table>
</form>
<table width="0">
<tr>
<td bgcolor="gray">Sira</td>
<td bgcolor="gray">baslik</td>
<td bgcolor="gray">aciklama</td>
<td bgcolor="gray">resim</td>
<td bgcolor="gray">ekleyen</td>
<td bgcolor="gray">tarih</td>
<td bgcolor="gray">Site</td>
<td colspan="2" bgcolor="gray">islem</td>
</tr>

<?PHP
require_once(‘baglan.php’);

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;

$result mysql_query($sql);

if (!$result) {
    echo 
"Could not successfully run query ($sql) from DB: " mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo 
"No rows found, nothing to print so am exiting";
    exit;
}

while ($row mysql_fetch_assoc($result)) {
    

$id=$row[‘id’];
$baslik=$row[‘baslik’];
$aciklama=$row[‘aciklama’];
$resim=$row[‘resim’];
$ekleyen=$row[‘ekleyen’];
$tarih=$row[‘tarih’];
$k_site=$row[‘k_site’];
$k_url=$row[‘k_url’];

?>

<tr><td><?php echo "$id"?></td>
<td> <?php echo "$baslik"?></td>

<td> <?php echo "$aciklama"?></td>
<td> <a href="<?php echo "$resim"?>" /> Resmi gormek icin tiklayin</a></td>
<td> <?php echo "$ekleyen"?></td>
<td> <?php echo "$tarih"?></td>
<td> <a href="http://<?php echo "$k_url"?>"><?php echo "$k_site"?></a></td>
<td> <a href="k_duzenle.php?id=<?php echo "$id"?>">Duzenle</a></td>
<td> <a href="k_sil.php?id=<?php echo "$id"?>">Sil</a></td>
<?php 

}

mysql_free_result($result);
?>
</tr>
</table>

 

yukaridaki islem sayfamizda da oncelikle ekleme bolumu yaptik ve hemen altinada veritabanindaki bilgileri listeleyerek duzenleme ve silme alanlari ekledik, bu sekilde listelenen bilgileri duzenleme ve silme linklerini kullanarak islem yapabilecegiz..

———-
Listelemeyi Sondan Baslayarak yapmak icin asagidakileri uygulamaniz yeterlidir:

Bunu

butun

kodlarinizda,

k_index.php

icin ve

k_islem.php

icinde kullanabilirsiniz.

 

listeleme islemini sondan baslayarak yapmak icin bu komutu kullanacagiz:

ORDER by id DESC

yani listeleme sayfamiz olan

k_islem.php

, sizinkini bilmiyorum herneyse, bu sekildeki kodlari:


$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    WHERE  id"
;     

bu sekilde degistirecegiz:

$sql "SELECT id as id, baslik, aciklama, resim, ekleyen, tarih, k_site, k_url 
    FROM   not_defteri
    ORDER by id DESC"
;     

yani sorgu sonundaki

WHERE id

degerine bununla degistirdigimizde :

ORDER by id DESC

Siralamayi sondan baslatarak yaptirmis oluyoruz…

——–

ama once eklemek istedigimiz bilgilerin gidecegi ve veritabanina eklenmesini saglayan sayfamizi olusturmaya..

k_ekle.php


<?PHP
require_once(‘baglan.php’);
?>

<?php

# güvenli form ç?kt?lar?
$baslik  strip_tags(htmlspecialchars(mysql_real_escape_string

($_POST["baslik"])));
$aciklama strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["aciklama"])));
$resim  strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["resim"])));
$ekleyen strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["ekleyen"])));
$tarih strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["tarih"])));
$k_site strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["k_site"])));
$k_url strip_tags(htmlspecialchars(mysql_real_escape_string
($_POST["k_url"])));

if(($baslik=="") or ($aciklama=="") or ($resim=="") or ($ekleyen=="") or ($tarih=="") or
 (
$k_site=="") or ($k_url=="")){
echo 
"Lutfen bos alan birakmayiniz<br />
<a href=’k_islem.php’>Tekrar Denemek icin geri donebilirsiniz</a>"
;
}else{

# kay?t sorgusu
$query mysql_query("INSERT INTO not_defteri 
(baslik,aciklama,resim,ekleyen,tarih,k_site,k_url) 
VALUES (‘$baslik’,’$aciklama’,’$resim’,’$ekleyen’,’$tarih’,’$k_site’,’$k_url’)"
);

# kontrol ediliyor
if($query) {
echo 
"kayit tamam";
echo 
"<br /><a href=’k_islem.php’>
geriye donerek islemlere devam edebilirsiniz</a>"
;
} else {
echo 
"kayit tamamlanamadi <br />
<a href=’k_islem.php’>Tekrar Denemek icin geri donebilirsiniz</a>"
;

}
}
?>

 

gordugunuz gibi ilk basta gelen verinin guvenirliligini kontrol ettik, ve ilerde gelebilecek aciklaara karsi veritabanina eklenen bilgileri sinadik..

 

sira geldi duzenleme sayfamizin yapimina gelen veriyi duzenlemek icin yukaridaki sayfada(k_islem.php) listeledigimiz veritabani id lerine duzenle linki eklemistirk, bu duzenle linkine tikladiktan sonra duzenleme yapacagimiz sayfayi olusturalim..

k_duzenle.php


<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
</head><?PHP
require_once(‘baglan.php’);
?>

   <?php 

# Once bilgileri al
$id=(int)$_GET[‘id’];

$sorgu=mysql_query("select * from not_defteri where id=’$id’");
$bilgi mysql_fetch_array($sorgu); 

echo ‘<form method="POST" action="k_baglan_duzenle.php">
<table width="439" border="0">
  <tr>
    <td width="53" height="32"><span class="style1">Bolumler</span></td>
    <td width="370">&nbsp;<span class="style1">Doldurulmasi Zorunlu Alanlar</span></td>
  </tr>
<input type="hidden" name="id" value="’
.$id.‘">
  <tr>
    <td>Baslik</td>
    <td><input name="baslik" value="’
.$bilgi[baslik].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>aciklama</td>
    <td><textarea name="aciklama" rows="10" cols="45">’
.$bilgi[aciklama].

</textarea></td>
  </tr>
  <tr>
    <td>Resim</td>
    <td><input name="resim" value="’
.$bilgi[resim].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Ekleyen</td>
    <td><input name="ekleyen" value="’
.$bilgi[ekleyen].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Tarih</td>
    <td><input name="tarih" value="’
.$bilgi[tarih].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site ismi</td>
    <td><input name="k_site" value="’
.$bilgi[k_site].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>Site url</td>
    <td><input name="k_url" value="’
.$bilgi[k_url].‘" type="text"/ size="60"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Ekle"/></td>
  </tr>
</table>
</form>’
;  ?> 
</html>

 

en basa yazdigimiz html karakter seti komutu veritabanindan gelen tr karakterli bilgilerin bozuk cikmamasini saglamak ;;

sonrasinda k_islem.php sayfasindan gelen id yi get metoduyla aldik ve o id deki bilgileri listeledik..

listeleme isleminden sonra yaptigimiz degisikliklerin veritabanina kaydedilmesi icin bize bir de bu bilgilerin yollandigi update sayfasi lazim, gelin simdi bunu yapalim..

k_baglan_duzenle.php


  <?PHP
require_once(‘baglan.php’);
?>
<?php
$id
=$_POST["id"];
$baslik=$_POST["baslik"];
$aciklama=$_POST["aciklama"];
$ekleyen=$_POST["ekleyen"];
$resim=$_POST["resim"];
$tarih=$_POST["tarih"];
$k_site=$_POST["k_site"];
$k_url=$_POST["k_url"];

$guncelle=mysql_query("update not_defteri SET 

baslik=’$baslik’,aciklama=’$aciklama’,
ekleyen=’$ekleyen’,resim=’$resim’,tarih=’$tarih’,k_site=’$k_site’,
k_url=’$k_url’ where id=’$id’");

if($guncelle) {

echo "guncelleme basarili oldu<br />
<a href=’k_islem.php’>geriye donerek islemlere devam edebilirsiniz</a>"
;
}else{
echo 
"guncelleme basarisiz oldu";
}
?>

bir ocneki sayfamizdan k_duzenle.php sayfamizdan yani gelen bilgileri degiskenlere atadik, ve sonrasinda update komutunu kullanarak veritabanina eklettirdik..

duzenleme sayfamizda bitmistir simdi gelelim silme sayfamiza..

daha once k_islem.php sayfasindan sil linki eklemistik, buna tiklayarak sil komutunu yapmamiz icin bize gerekli olan son sayfada,

 

k_sil.php


<?php
require_once(‘baglan.php’);

$id=$_GET["id"];
echo 
"$id";
$sil=mysql_query("delete from not_defteri where id=’$id’");
if(
$sil){
echo 
"silme islemi basarili";
}else{
echo 
"silme islemi basarisiz";
}
?>

yukaridaki komutlada get metoduyla gelen id yi degiskene atadik ve degiskeni delete kodu kullanarak veritabanindan sildik..

islem bu kadar arkadaslar, sorulariniz olursa cekinmeyin sorun..

vista kullaniyorum localhostta sorunsuz bir sekilde calisiyor, sizde denemelerini yapmak icin yukaridaki dokumanlari kullanabilirsiniz..