Bugün: 07/10/2008. Hoşgeldiniz!

‘kişiler (tanıtım)’ Kategorisi

77 yaşındaki Charan Singh Panwar isimli emekli çiftçi, hayatı boyunca bir erkek evlat sahibi olmak istedi.

Ancak bu amacına hiç ulaşamadı. İki kız çocuğu dünyaya getiren ve 5 torun sahibi olan çiftçi, soyunun devam etmesi için geç de eşi Omkari Panwar’ın tüp bebek yöntemiyle hamile kalmasını sağladı.

Geçen hafta sezaryenle sağlıklı bir erkek ve bir kız çocuğu dünyaya getiren Omraki, hastane personelini şoka sokarken, tüm ailesini de sevince boğdu. 2005 yılında Romanya’da 66 yaşındaki Adriana Iliescu isimli kadın bir kız çocuğu dünyaya getirmiş ve dünyanın en yaşlı annesi olmuştu

Nasreddin Hoca

Yazan: admin Tarih: Temmuz - 8 - 2008

nasreddin hoca

 Nasrettin Hoca’nın Hayatı

Seyyid Mahmud Hayrani ve Seyyid Haci Ibrahim’in derslerini dinledi, Islam diniyle ilgili çalismalarini sürdürdü. Bir söylentiye göre medresede ders okuttu, kadilik görevinde bulundu. Bu görevlerinden dolayi kendisine Nasuriddin Hâce adi verilmis, sonradan bu ad Nasreddin Hoca biçimini almistir. Onun yasamiyla ilgili bilgiler, halkin kendisine olan asiri sevgisi yüzünden, söylentilerle karismis, yer yer olaganüstü nitelikler kazanmistir. Bu söylentiler arasinda, onun Selçuklu sultanlariyla tanistigi, Mevlânâ Celâleddin ile yakinlik kurdugu, kendisinden en az yetmis yil sonra yasayan Timur’la konustugu, birkaç yerde birden göründügü bile vardir. Nasreddin Hoca’nin degeri, yasadigi olaylarla degil, gerek kendisinin, gerek halkin onun agzindan söyledigi gülmecelerdeki anlam, yergi ve alay ögelerinin inceligiyle ölçülür. Onun oldugu ileri sürülen gülmecelerin incelenmesinden, bunlarda geçen sözcüklerin açiklanisindan anlasildigina göre o, belli bir dönemin degil Anadolu halkinin yasama biçimini, güldürü ögesini, alay ve eglenme türünü, övgü ve yergi becerisini dile getirmistir. Onunla ilgili gülmeceleri olusturan ögelerin odagi sevgi, yergi, övgü, alaya alma. O, bunlari söylerken bilgin, bilgisiz, açikgöz, uysal, vurdumduymaz, utangaç, atak, saskin, kurnaz, korkak, atilgan gibi çelisik niteliklere bürünür. Özellikle karsisindakinin durumuyla çeliski içinde bulunma, gülmecelerinin egemen ögesidir. Bu ögeler Anadolu insaninin, belli olaylar karsisindaki tutumun yansitan, düsünce ürünlerini olusturur. Nasreddin Hoca, halkin duygularini yansitan, bir gülmece odagi olarak ortaya çikarilir. Söyletilen kisi, söyletenin agzini kullanir, böylece halk Nasreddin Hoca’nin diliyle kendi sesini duyurur. Nasreddin Hoca, bütün gülmecelerinde, soyut bir varlik olarak degil, yasanmis, yasanan bir olayla, bir olguyla baglantili bir biçimde ortaya çikar. Olay karsisinda duyulan tepkiyi ya da onayi gülmece türlerinden biriyle dile getirir. Tanik oldugu olaylar, genellikle, halk arasinda geçer.

Hoca soylularin, yüksek saray çevresinde bulunanlarin aralarina ya çok seyrek girer ya da hiç girmez. Sözgelisi onun tanistigi söylenen Selçuklu sultanlariyla ilgili gülmecesi yoktur. Timur’la ilgili “hamam, Timur ve pestemal” gülmecesi de, Timur’dan çok önce yasadigi için, sonradan üretilmistir. Halk begenisi Hoca’yi Timur gibi çevresine korku salan bir imparatorun karsisina hamamda çikarak, “kizim sana söylüyorum, gelinim sen isit” türünden bir yergi yaratmistir. Burada yerilen, dolayli olarak, kendi toplumun, halkin üstünde gören saray insanlaridir.

Nasreddin Hoca gülmecelerinde dile gelen, onun kisiliginde, halkin duygularini yansitan baska bir özellik de esegin yeridir. Hoca eseginden ayri düsünülemez, onun tasiti, binegi olan esek gerçekte bir yergi ve alay ögesidir. Anadolu insaninin yarattigi gülmece ürünlerinde atin yeri yoktur denilebilir. Esek, aciya, sikintiya, dayaga, açliga katlanisin en yaygin simgesidir. Soylularin, saraylarin çevresinde üretilmis gülmecelerde esek bulunmaz, oysa at genis bir yer tutar. Bu konuda, baska bir çeliski sergilenir, gülmecede güldürücü öge ile yerici öge yanyana getirilir. Bunun örnegi de kendisinden esegi isteyen köylüye, “esek evde yok” deyince ahirda onun anirmasini duyan köylünün “iste esek ahirda” diye diretmesi karsisinda, Hocanin “esegin sözüne mi inanacaksin benimkine mi” demesidir. Onun gülmecelerinde, kaba sofularin “ahret” le ilgili inançlari da önemli bir yer tutar. “Fincanci Katirlari”, “Ben Sagligimda Hep Burdan Geçerdim” baslikli gülmeceler kati bir inanç karsisindaki duyguyu açiga vurur. Toplumda neye önem verildigini anlatan “Ye Kürküm Ye” gülmecesi, Hoca’nin dilinde, halkin tepkisini gösterir.

Nasreddin Hoca’nin etkisi bütün toplum kesimlerine yayilmis, “Incili Çavus”, “Bekri Mustafa”, “Bektasi” gibi çok degisik yörelerin duygularini yansitan gülmece türlerinin dogmasina olanak saglamistir.

ekleyen: isbara kaynak:Aksehir Belediyesi web sitesi

 

bir çok yerde sanirsan herkes bundan yakiniyor bende group kullanimi ve max kullanimi hakkinda detayli bir aciklama yapmak istedim. aslinda konu sql konusu ama bilinçsin bazı kesim surekli php de aradıkları için bu kategoriye yazarsam daha kolay yayılabileceğini düşündüm.

bir çok kişide gördüğüm soru şu;

"group by ile fieldi grupluyorum ve order by ile tersten sona listeliyorum yanliz şu şekilde bir problem var listelerken gruplanan fielde bagli ilk kayidi aliyor. yani username e gore gruplarsak bu kullanici 2004 yilinda ilk yazisini girmis 2007 de son yazisini girmis ama 2004 dekini baz alarak listeliyor. nasil cozum uretebilirim."

bu soruya karşı herkes binbirturlu akrobatliklarla yardimci olmaya calismis. yok efendim while icinde kontrol, tekrardan sorgu, array a yazdir kontrol et. gereksiz.

bu gibi durumlarda max tam bizim işimize göre. seçilen fielde bağlı en yüksek yani maximum kayidi getirecektir.

örneğin:
tablo makale
-id–yazar–veri

kayitlar
-1–caesar–ehe
-2–caesar–hoho
-3–yns–hobele
-4–savvy-yeap
-5–hunter-ok
-6–caesar-slm
-7–yns–hello world
-8–hunter-hypertext

sorgumuz:

plaın textphp:
$sorgu=mysql_query("select max(id) as id, yazar, text,count(id) as sayi from makale group by yazar order by id desc");

olsun. while icinde bu donguden yazar ,text ve sayiyi cektigimiz zaman sonu su olacaktir.

hunter - hypertext (2)
yns - hello world (2)
caesar - slm (3)
savvy - yeap (1)

bu sekilde son yani maximum kayit degerlerine göre verilen fieldden listeleme yapmis olacağız

kaynak: ordan burdan

30mb'dan daha büyük bir mysql veritabanınız olduğunu düşünün. ve senaryo öyle olsun ki bu veritabanınızı yeni bir sunucuya yüklemek isteyin. muhtemel deneme yolunuz da phpmyadmin olacaktır. phpmyadmin'i açıp veritabanını yüklemeye başladığınızda bu işi hem kapasite hem de süre olarak sizi çok sıkıntıya düşüreceğini farkedersiniz. peki veritabanı yeni sunucuya taşınamayacak mı? elbette ki taşınacak ama adına bigdump denilen bir başka araç ile.

LİNK

aşağıda bu uygulamanın nasıl kullanılacağı ve veritabanın nasıl başka bir sunucuya taşınacığın adımları açıklanmaktadır.

1. ilk olarak mysql veritabanınızı sabit diskinize kopyalayın. bu koplayama işlemini phpmyadmin'in dışa aktarma (export) menüsü ile yapabilirsiniz.

2. daha sonra bigdump programını bilgisayarınıza indirip herhangi bir sıkıştırma aracı ile programı açın.

3. yeni web sunucunuza örneğin "dumb" isimli bir dizin oluşturun ve bu dizinin erişim haklarını 777 olarak değiştirin.(veritabanını içe aktarmadığınız sürede bu erişim iznini ön tanımlı değerine geri çevirmeyi unutmayınız.)

4. sıkıştırma programı ile açtığınız program içerisinden çıkan bigdump.php dosyasını herhangi bir metin düzenleyici program ile açın ve bu dosya içerisindeki veritabanı adı, kullanıcı adı ve parola gibi veritabanı ayarlarını düzenleyin.

5. bilgisayarımızda tüm ayarlamaları bitirdik artık sıra veritabanını yeni sunucuya yüklemeye geldi. bigdump.php dosyası ile eski sunucumuzdan indirdiğimiz veritabanı yedeğimizi,3. adımda yeni sunucuda oluşturduğumuz ve adına "dumb" dediğimiz dizine yükleyin.

6. şimdi bigdump.php dosyanızı terhic ettiğiniz tarayıcı ile açın. tarayıcıda kullanacağınız adres şu şekilde olacaktır:

şekilde olacaktır:

http://sitenizin_adresi/dump/bigdump.php

7. İşlemi başlatmak için uygun seçeneği seçip süreci başlatın, ve işlem tamamlanana kadar da tarayıcınızı kapatmayın, eğer kapatırsanız yeni sunucunuzda tamamlanmamış bir veritabanı elde edersiniz. Yedeklediğiniz eski veritabanının 40MB boyutunda olduğunu varsayarsak tüm işlemin tamamlanması 1 dakikadan daha az bir süre tutacaktır.

8. Tüm işlem bitmiş sayılmaz sizin yüklemiş olduğunuz eski veritabanını ve bigdump.php dosyasını sunucudan silmeniz gerek, ayrıca dump dizinini de silmelisiniz ya da erişim izinlerini öntanımlı hale getirebilirsiniz.

Görüldüğü gibi başta yapılamıyacak mı dediğiniz veritabanını yeni sunucuya taşıma işlemi 8 adımda halledilmiş oldu.

kaynak: ordan burdan

web programıcısı olarak ziyaretçinin bize göndereceği bilgileri yakalamayı öğrendik. şimdilik sadece ziyaretçinin browser'ına geri gönderdiğimiz bu bilgileri, sunucu tarafından çeşitli işlemlerde kullanabiliriz. bu işlemlerin başında dosya girdi/çıktı işlemleri gelir. başka bir ifade ile ziyaretçiden aldığımız bu bilgileri sunucuda bir dosyaya yazdırabiliriz. bu bölümde php ile sunucuda yapabileceğimiz dosya işlemlerine bakacağız. tabiã® dosya işlemleri dendiğinde sadece ziyaretçiden aldığımız bilgileri bir dosyaya yazdırmakla yetinmeyeceğiz; php programlarımıza sunucuda bir dosyada bulunan bilgileri okumasını da öğreteceğiz.

harici dosya (include)
php programlarımızda bilmemiz gereken ilk dosya işlemi, bir php programına, kendi dışındaki dosyayı, tabir yerinde ise, okutmak ve içindekileri aynen alıp, görüntülemesini sağlamaktır. bunu include komutu ile yaparız. bu komut, kendisine adı verilen düzyazı dosyasının içeriğini aynen bu komutun bulunduğu noktaya "yazar." bu yolla bir php programına sık kullandığınız bir metni veya program parçasını dahil edebilirsiniz. bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucu ve browser'ların tanıdğı mıme türlerine ait uzantılardan farklı yaparsanız, ziyaretçiler şans eseri de olsa bu dosyaları doğruca edinme imkanı bulamazlar. bir örnek yapalım. önce şu metni, harici_dosya01.x adıyla ve düzyazı biçiminde kaydedin (windows ortamında notepad'i kullanıyorsanız, dosya adı uzatması olarak .x harfinden sonra .txt harflerini eklediğine dikkat edin!):
"ben harici bir dosyanın içindeki yazıyım.. beni bir php programı alıp buraya getirdi! kendisine teşekkür ederim"
sonra, şu programı dosya_ekle01.php adıyla kaydedin, ve browser'da açın:

kod:
<html>
<head>
<tıtle>php'de harici dosya ekleme</tıtle>
<meta http-equiv="content-type" content="text/html; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/html; charset=windows-1254">
</head>
<?php
include ("harici_dosya01.x");
print ("
<p> ben zaten bu programının içinde olan bir yazıyım. baştan beri burada olduğuma çok memnununum.. harici dosyaya hoşgeldin diyorum!</p>");
?>
</body>
</body>
</html>
buradaki include komutu biraz önce yazdığımız harici dosyayı alacak, içeriğini aynen kendi bulunduğu noktada, php'nin oluşturacağı html dosyasına katacaktır. bu programı çalıştırdığınızda görüntü şöyle olacaktır:
bu görüntüyü aldığınız sırada browser'ınızda kaynağı görüntülerseniz, iki metnin adeta birleştirilmiş olduğunu göreceksiniz. fakat dışardan php programına sadece düz metin eklemeyiz; program veya fonksiyon da ekleyebiliriz. harici dosyada şu değişikliği yaparak, harici_dosya02.x adıyla kaydedin.

kod:
<?php
print ("ben de harici dosyayım.!<br>");
print ("ama ben hesap da yaparım.. örneğin iki iki daha ". (2 + 2). " eder!");
?>
haricã® dosya okuyan programı da programı içinde, okunacak dosya adını düzelttikten sonra dosya_ekle02.php adıyla kaydedin; ve çalıştırın.
haricã® dosyamızda yer alan …iki iki daha ". (2 + 2). " eder!"); şeklindeki ifadenin programa gelirken "..iki iki daha 4 eder!" şekline gelmesinin izahı, php'nin dışarıdan aldığı dosyanın içinde php programı olduğunu gördüğü anda, bu dosyanın içeriğini metin olarak değil, program olarak ele almasıdır. bu yolla, php programlarımıza bir değerin dönmesini de sağlayabiliriz. haricã® dosyamızda şu değişikliği yapalım ve harici_dosya03.x adıyla kaydedelim:

kod:
<?php
$sonuc = ( 2 + 2 );
return $sonuc;
?>
bu satır bakalım programa dahil olacak mı?
sonra, program metninde şu değişlikliği yaparak, dosya_ekle03.php adıyla kaydedin ve çalıştırın:

kod:
<?php
$donen_sonuc = include("harici_dosya03.x");
print ("
<p> harici dosyadan dönen sonuç: $donen_sonuc </p>");
?>
haricã® dosyamızın içindeki program, return komutu ile sadece kendi içinde elde ettiği sonucu, onu çağıran programa verdi; ve bu sonucu alan programımız, sadece kendi içindeki bir değişkenin değerini browser'a gönderdiği halde, bu değer haricã® dosyadan alınmış oldu.
haricã® dosyaların include yoluyla php programlarımıza katılması, özellikle bir sitenin bir çok programında sık sık kullanılan metinlerin ve hesaplamaların bir kere yazılmasını ve tek satırla çağrılmasını sağladığı için kolaylık sağlar ve hata ihtimalini azaltır.
include mu, require mı?
php4.0 ile, include komutu gibi işleyen ancak ondan farklı olarak kendisini çağıran programa değer veremeyen require komutu da kullanılabilir hale geldi. içinde bir hesaplama bulunmayan veya kendisini çağıran dosyaya bir return komutu ile bir değer dönmesini sağlaması beklenmeyen dosyaları require komutu ile de ana programımıza dahil edebiliriz.
include ile alacağımız dosyaların adını php programının oluşturmasını sağlayarak kimi zaman pogramlarımıza dinamizm sağlamamız mümkündür. sözgelimi bir menü maddesinin tıklanmasıyla harekete geçen bir javascript fonksiyonunun, ziyaretçinin gideceği sayfaya göndereceği değeri include komutuna dosya adı oluşturmakta kullanabiliriz. bazen include komutuna dosya adı oluşturmakta program içindeki döngülerden yararlanınız. örnek:

kod:
for ( $i = 1 ; $i <= 3 ; ++$i) {
include ("dosya0" . $i . ".x");
}
haricã® dosyalarımızın adlarının dosya01.x, dosya02.x ve dosya03.x olmalı halinde, bu döngü sırasıyla her üç dosyayı da çağıracak ve altalta ana programa dahil edecektir.

dosyalar hakkında bilgi
php'de yukarıda ele aldığımız include ve require komutları ve biraz sonra değineceğimiz dosya okutma ve yazdırma işlemleri dolayısıyla bir dosyanın varlığı veya yokluğu, ya da bir dosyaya ait sandığımız ismin bid klasöre ait olması, programımızın sağlıklı işleyebilmesi açısından büyük önem taşır. php bu amaçla bize bir kaç kullanıma hazır fonksiyon sağlıyor. burada kısaca bu fonksiyonlara ve nasıl kullanıldıklarına değinelim:

dosya var mı? file_exits()
bir dosyanın var olup olmadığını denetleyen bu fonksiyon, dosya varsa true/doğru, yoksa false/yanlış sonucunu verir. örnek:

kod:
if ( file_exits ( "bir_dosya.txt" ) )
print ("dosya var!");
dosya yoksa, program "dosya var!" yazmadan yoluna devam edecektir.

dosya mı, dizin mi? is_file() ve is_dir()
kimi zaman klasörler de tıpkı dosyalar gibi adlandırılabilir. bir dizinde gördüğümüz ismin gerçekten bir dosyaya ait olup olmadığını bu fonksiyonla sınarız. sınama doğru, yani isim bir dosyaya ait ise fonksiyon true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_file ( "bir_dosya.txt" ) )
print ("bu bir dosyadır!");
isim bir dosyaya ait değilse program "bu bir dosyadır!" yazmadan yoluna devam edecektir. sınamayı ismin bir klasöre ait ait olup olmadığına bakrarak da yaparız. bu durumda is_dir() fonksiyonunu kullanırız. isim bir dizine aitse fonksiyon true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_dir ( "/bir_isim" ) )
print ("bu bir dizindir!");
isim bir dizine ait değilse program "bu bir dizindir!" yazmadan yoluna devam edecektir.

dosya okunabilir mi? is_readable()
programda kullanmaya karar vermeden önce bir dosyanın erişilebilir ve php tarafından okunabilir olup olmadığını sınayan bu fonksiyon, dosya okunabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_readable ( "bir_dosya.txt" ) )
print ("bu dosya okunabilir!");
dosya okunabilir değilse program "bu dosya okunabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz her dosyanın okuma izni bulunmayabilir.)

dosya yazılabilir mi? is_writable()
programda kullanmaya karar vermeden önce bir dosyanın yazılabilir olup olmadığını sınayan bu fonksiyon, dosya yazılabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_writable ( "bir_dosya.txt" ) )
print ("bu dosyaya yazılabilir!");
dosya yazılabilir değilse program "bu dosyaya yazılabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz hatta okuyabildiğimiz her dosyanın yazma izni bulunmayabilir.)

dosya çalıştırılabilir mi? is_executable()
php programında kimi zaman sunucunun kullanmamıza izin verdiği haricã® programları çalıştırız; php programımızın düzgün işlemesi bu harici programa bağlı olabilir. böyle bir programı çalıştırmaya karar vermeden önce bir dosyanın çalıştırılabilir olup olmadığını sınayan bu fonksiyon, dosya çalıştırılabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_executable ( "bir_dosya" ) )
print ("bu dosya çalıştırılabilir!");
dosya çalıştırılabilir bir program değilse php programı "bu dosya çalıştırılabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz her pprogram dosyasının çalıştırma izni bulunmayabilir.)

dosya boyutu: filesize()
adını verdiğimiz dosyanın boyutunu byte olarak bildirir: örnek:

kod:
print ("dosyanın boyutu:");
print filesize( "bir_dosya.txt" );

[ımg]file:///c:/docume%7e1/deadly/locals%7e1/temp/msohtml1/07/clip_image002.gif[/ımg]

dosyaya son erişim tarihi: fileadate(), filemtime() ve filectime()
adını verdiğimiz dosyaya son erişim tarihini bildirir. ne var ki bu bilgi unix'in "epoch" biçimindedir: örnek:

kod:
print ("dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print ( " $dosya_tarihi " );
eğer bu dosyanın son erişim tarihi 28 temmuz 2000, cuma 24:00:00 ise, php, browser penceresine 964731600 yazacaktır. bu komutun ürettiği bilgiyi, date()
kod:
fonksiyonu ile anlaşılabilir hale getirebiliriz:
print ("dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print date("d d m y g:i:s h", $dosya_tarihi );bu kez php browser penceresine 28 jul 2000 242:00:00 00 yazdıracaktır. tarih verilerinin date() fonksiyonu ile biçimlendirilmesini daha sonra ayrıntılı ele alacağız.
filemtime(), bir dosyanın son değiştirildiği tarihi; filectime(), ise oluşturulduğu tarihi, yine unix epoch biçiminde bildirir; bu verinin anlaşılır biçimde görüntülenmesi için php'nin date() fonksiyonu kullanılır.

dosyalar oluşturma ve silme
php ile yapabileceğimiz önemli dosya işlemlerinin başında olmayan bir dosyayı oluşturmak ve olan bir dosyayı silmek gelir. php'nin dosya oluşturma komutu touch() fonksiyonudur. bu fonksiyona oluşturulmasıın istediğimiz dosyanın adını vermemiz gerekir. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
</body>
</html>
bu programı kişisel web sunucuda denerken yeni dosyanın oluşturulacağı dizin olarak "/" işaretiyle sadece kökdizini belirtirseniz, dosya c: diskinde kökdizinde oluşturulur. bu programı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
bu komutla oluşturacağınız dosya içi boş bir metin dosyası olacaktır. eğer belirttiğiniz dizinde bu adı taşıyan bir dosya varsa, php dosyanın içeriğine dokunmayacak, fakat dosyanın erişim ve değişim tarihlerini değiştirecektir.
php ile mevcut bir dosyayı silmek için unlink() fonksiyonunu kullanırız. bu fonksiyon da silinecek dosyanın adı ile birlikte yolunu ister. örnek:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
unlink ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı dosya silindi!");
?>
bu komut windows sistemlerinde işlemeyebilir.

dosya açma
php'de bir dosyanın içeriğini alarak sayfalarımızda kullanma veya bir dosyanın içeriğini değiştirmek gibi işlemler için önce dosyanın açılmış olması gerekir. bunu gerçekleştiren fopen() fonksiyonudur. bu fonksiyonla bir dosyayı okumak ('r'), yazdırmak ('w') veya ek yapmak ('a') için açabiliriz. bu fonksiyon dosyanın başarıyla açılması halinde bir tamsayı verecektir. php programlarımızda, açılan dosyanın mutlata ona işaret eden bir değişkene (file pointer) bağlı olması gerekir; daha sonra bu dosya ile ilgili bütün işlemleri bu işaret değişkeni ile yaparız. örnek:

kod:
$dosya = fopen( "bir_dosya.txt" , 'r' );
php, bu dosyayı sadece okumak amacıyla açacak ve fonksiyondan dönen değeri $dosya değişkenine atayacaktır. olmayan bir dosyayı açmak istediğimiz zaman php hata mesajı verir. bir dosyayı yazmak amacıyla açacağımız zaman, bu kodu şöyle yazarız:

kod:
$dosya = fopen( "bir_dosya.txt" , 'w' );
olmayan bir dosyayı yazmak amacıyla açmak istediğimizde php önce bu dosyayı oluşturur. bir dosyaya ek yapmak istediğimiz zaman ise kodumuz şu şekilde yazılır:

kod:
$dosya = fopen( "bir_dosya.txt" , 'a' );
olmayan bir dosyayı ek yapmak amacıyla açmak istediğimizde php hata mesajı verir.

bir fonksiyonu durdurmak için: öl!
bir php fonksiyonunun kendisinden beklenen işi yapamaması halinde oracıkta durdurulmasını die() komutu sağlar. "öl!" anlamına gelen bu fonksiyona ekranda görüntülenmesini istediğimiz bir metni parametre olarak verebiliriz. bu bölümdeki örnekler bu komutla birlikte şöyle yazılabilir:
$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("dosya açılamıyor!") ;
bu komutu kişisel web sunucusunda denerken, dosyanın açılacağı dizinin yolunu belirtmemiz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
php, bu dosyayı açtığında browser penceresinde dosyanın açıldığını belirten mesajı görüntülecektir. bu işlemi ınternet'teki bir web sunucuda uygulayabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
açtığımız bir dosya ile yaptığımız bütün işlemler bittikten sonra, dosyanın kapatılması gerekir. dosya kapatma işlemini fclose() fonksiyonu yapar. bu fonksiyona parametre olarak dosya adını değil, dosyanın işaretçisi olan değişkenin adını veririz. örnek:

kod:
fclose ( $dosya );
dosya okuma: fgets(), fread() ve fgetc()
açtığımız bir dosyanın içindeki yazıları çoğu zaman programımıza satır satır okuturuz. php'de bir dosyanın içeriğini satır satır okutmamızı fgets() fonksiyonu sağlar. bu fonksiyona daha önce açılmış olan dosyanın işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü parametre olarak veririz. fgets() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir. bu fonksiyonu çoğu zaman bir döngünün içinde kullanırız. ancak döngünün hata vermemesi için, php'nin dosyanın sonuna ulaştığında döngüyü durdurmamız gerekir. fgets() fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilir ve daha sonra bu değeri programlarımızda kullanabiliriz. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya ) ) {
$satir = fgets ( $dosya, 1024 ) ;
print ("$satir<br>");
}
fclose ($dosya);
?>
bu program kişisel web sunucuda önce varolan bir dosyayı açıyor; ve bu dosyanın işaretçisi olarak $dosya değişkenini kullanıyor. daha sonra bir while() döngüsü içinde bu değişkeni ve 1 kb (1024 byte) ölçüsünü parametre olarak vererek fgets() fonksiyonu ile dosyadan bir satır okutuyoruz. fgets() fonksiyonundan dönen bir satırlık metni, burada $satir değişkenine atıyoruz; ve daha sonra print() fonksiyonu ile bu satırı browser penceresine gönderiyoruz. bu işlemi ınternet'teki bir web sunucuda uygulayabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. bu işlemin içinde yapıldığı while() döngüsünün devam şartı olarak kullandığımız ifadede yer alan feof() fonksiyonu bir dosyanın dosya-sonu (end-of-file) durumuna ulaşıp ulaşmadığını sınar. php, her dosyanın sonunda yer alan eof (ctrl-z, ^z) işaretine eriştiği anda feof() fonksiyonu doğru/true değerini verir. while() döngüsü, feof() doğru değilken devam etmek üzere kurulmuş olduğu için, dosya sonuna ulaştığımızda döngü duracaktır. okuma işlemini durabilen bir döngüye bağlamazsak, fgets() php'nin bir programın sona ermesi için verilmiş varsayılan süresi doluncaya kadar dosyayı okumak isteyecektir.
kimi zaman dosyalarımızın içeriğini satır-satır okutmak yerine, kendi tayin edeceğimiz uzunlakta parçalar halinde okutmak isteriz. bunu, fread() fonksiyonu ile sağlarız. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya) ) {
$paragraf = fread ( $dosya, 1024 ) ;
print ("$paragraf<br>");
}
fclose ($dosya);
?>
fread() fonksiyonu da daha önce açılmış olan dosyanın işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü parametre olarak alır. fread() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir. bu fonksiyondan yararlanırken, verdiğiniz uzunluk ölçüsünün, almak istediğiniz metin parçasına uygun olduğunu sınamalısınız. fread(), bu ölçüye ulaştığında okumayı keser. buradaki örneği 1024 byte ölçüsünü değiştirerek ve mesela 1, 2, 3 yaparak deneyebilir ve böylece vereceğiniz ölçünün okunan metnin uzunluğunu nasıl tayin ettiğini görebilirsiniz.
fseek() ile ölçü belirleme
php'nin dosya işleminde kullabileceğiniz bir diğer fonksiyonu fseek() adını taşır. daha önce açılmış olan dosyanın işaret değişkenin adını ve ve programın bu metin içinde zıplamasını istediğiniz noktanın dosyanın başından itibaren byte değerini parametre olarak alan bu fonksiyon ile, bir dosyanın içinnde istediğimiz yere gitme imkanı vardır. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
if ($dosya = (fopen ($dosya_adi , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
$dosya_boyut = filesize($dosya_adi);
$olcu = (int) ($dosya_boyut / 2 );
while ( ! feof ($dosya) ) {
$paragraf = fread ( $dosya, $olcu) ;
print ("$paragraf<br>");
}
fclose ($dosya);
?>
burada, okutulacak dosyanın boyutunun yarısını atadığımız $olcu değişkenini, okutulacak metnin ölçüsü olarak kullanıyoruz. bu durumda php, dosyayı iki paragraf halinde görüntüleyecektir.
dosyalarımızın içeriğini satırlar veya belirli ölçüde parçalar halinde değil de, tek-tek karakter olarak okutmak için fgetc() fonksiyonundan yararlanırız. bu fonksiyon, daima 1 byte ölçüsünde (bir karakter) metin okuyabileceği için, parametre olarak sadece daha önce açılmış olan dosyanın işaret değişkenin adını alır. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
if ($dosya = (fopen ($dosya_adi , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya) ) {
$karakter = fgetc ( $dosya ) ;
print ("$karakter<br>");
}
fclose ($dosya);
?>
burada fgetc() fonksiyonundan dönen değeri (yani dosyadan okunan bir karakteri), $karakter değişkenine atıyoruz ve daha sonra print() fonksiyonu ba karakteri ve html'in satır bölme kodu olan <br> işaretini browser penceresine gönderiyor. programı bu şekliyle sınarsanız, dosyadaki metnin tek karakter olarak browser penceresinin soluna dizildiğini göreceksiniz. programı <br> kodunu silerek çalıştırırsanız, bu kez dosyadaki metinde var olan satır sonu işaretlerinin de kaldırıldığını ve metnin bir paragraf oülarak görüntülendiğıini görebilirsiniz.

dosyaya yazma ve ek yapma: fwrite() ve fputs()
bir dosyaya yazma veya ek yapma, php açısından aynı işlemdir; sadece dosyaların açılışında fark vardır. hatırlayacaksınız, bir dosyayı yazmak amacıyla açmak için:

kod:
$dosya = fopen( "bir_dosya.txt" , 'w' ) or die ("dosya açılamıyor!") ;
ek amacıyla açmak için ise

kod:
$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("dosya açılamıyor!") ;
kodunu yazmamız gerekir. dana sonra yapılacak yazma ve ekleme işlemlerinin farkı, 'w' parametresi ile açılan dosyaya yazma işlemi en başından başlar ve devam eder; 'a' parametresi ile açaılan dosyaya yazma işlemi ise en sondan başlar ve devam eder.
php'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() ve fputs() aynı biçimde yazılır ve aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
$dosya = fopen ($dosya_adi , 'w') or die ("dosya açılamadı!");
$metin = "bu satır dosyaya yazılacak: merhaba dünya!
";
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , "bu satır ise sonradan eklenecek
" ) ;
fclose ($dosya);
?>
bu programı çalıştırdığınızda, bir_dosya.txt adlı dosyada mevcut bütün içerik silenecek ve yerini $metin değişkeninin içerdiği "bu satır dosyaya yazılacak: merhaba dünya!" yazısı ile "bu satır ise sonradan eklenecek" cümlesi alacaktır. her iki metnin sonunda da yeni satır işareti bulunduğuna dikkat edin. bu programda dosya açma kıomutundaki 'w' parametresini siler, yerine 'a' yazarsanız, bu metinlerin dosyanın içeriğine eklendiğini görebilirsiniz.

kullanımdaki dosyayı kilitleyin!
web sunucusundaki dosyalarımızla sadece bir kişi işlem yapıyor olsa idi, bir sorun olmazdı; ne var ki, bir web sitesine aynı anda birden fazla kişi eriyebilir ve dosyalarla işlem yapan programları çalıştırıyor olabilir. bu, php'nin dosya işlemlerine engel olabilir. bu sebeple, işlem için açacağımız bir dosyayı, önce kilitlemek yerinde bir önlem sayılır. bunu, flock() fonsiyonu ile yaparız; bu fonksiyona kilitlemek istediğimiz dosyanın işaret değişkeninin adını ve kilit türünü belirten endeks sayısını parametre olarak yazarız. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
$dosya = fopen ($dosya_adi , 'w') or die ("dosya açılamadı!");
flock ( $dosya , 2); // dosyayı kilitle
$metin = "bu satır dosyaya yazılacak: merhaba dünya!
";
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , "bu satır ise sonradan eklenecek
" ) ;
flock ( $dosya , 3); //dosyayı kilidini aç
fclose ($dosya);
?>
bu fonksiyon ile kullanabileceğimiz endeks parametreleri şunlardır:
1 paylaşım diğer proseslerin dosyayı paylaşmalarına imkan verir
2 tam diğer proseslerin dosyaile işlem yapmasına engel olur
3 serbest dosyanın 1 veya 2 olan kilidini kaldırır
bir dosya, herhangi bir php programı tarafından kilitlendiği anda, aynı dsyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı gösterirler.

dizinlerle işlemler
php ile sunucuda, web dizini olarak kullandığımız alanda yeni dizinler oluşturabiliriz, silebiliriz, ve bunlar hakkında bilgi edinebiliriz. bu işlemleri web sunucuda yapabilmek için web dizininde okuma ve yazma izni bulunması gerekir.

kaynak: ordan burdan

web programıcısı olarak ziyaretçinin bize göndereceği bilgileri yakalamayı öğrendik. şimdilik sadece ziyaretçinin browser'ına geri gönderdiğimiz bu bilgileri, sunucu tarafından çeşitli işlemlerde kullanabiliriz. bu işlemlerin başında dosya girdi/çıktı işlemleri gelir. başka bir ifade ile ziyaretçiden aldığımız bu bilgileri sunucuda bir dosyaya yazdırabiliriz. bu bölümde php ile sunucuda yapabileceğimiz dosya işlemlerine bakacağız. tabiã® dosya işlemleri dendiğinde sadece ziyaretçiden aldığımız bilgileri bir dosyaya yazdırmakla yetinmeyeceğiz; php programlarımıza sunucuda bir dosyada bulunan bilgileri okumasını da öğreteceğiz.

harici dosya (include)
php programlarımızda bilmemiz gereken ilk dosya işlemi, bir php programına, kendi dışındaki dosyayı, tabir yerinde ise, okutmak ve içindekileri aynen alıp, görüntülemesini sağlamaktır. bunu include komutu ile yaparız. bu komut, kendisine adı verilen düzyazı dosyasının içeriğini aynen bu komutun bulunduğu noktaya "yazar." bu yolla bir php programına sık kullandığınız bir metni veya program parçasını dahil edebilirsiniz. bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucu ve browser'ların tanıdğı mıme türlerine ait uzantılardan farklı yaparsanız, ziyaretçiler şans eseri de olsa bu dosyaları doğruca edinme imkanı bulamazlar. bir örnek yapalım. önce şu metni, harici_dosya01.x adıyla ve düzyazı biçiminde kaydedin (windows ortamında notepad'i kullanıyorsanız, dosya adı uzatması olarak .x harfinden sonra .txt harflerini eklediğine dikkat edin!):
"ben harici bir dosyanın içindeki yazıyım.. beni bir php programı alıp buraya getirdi! kendisine teşekkür ederim"
sonra, şu programı dosya_ekle01.php adıyla kaydedin, ve browser'da açın:

kod:
<html>
<head>
<tıtle>php'de harici dosya ekleme</tıtle>
<meta http-equiv="content-type" content="text/html; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/html; charset=windows-1254">
</head>
<?php
include ("harici_dosya01.x");
print ("
<p> ben zaten bu programının içinde olan bir yazıyım. baştan beri burada olduğuma çok memnununum.. harici dosyaya hoşgeldin diyorum!</p>");
?>
</body>
</body>
</html>
buradaki include komutu biraz önce yazdığımız harici dosyayı alacak, içeriğini aynen kendi bulunduğu noktada, php'nin oluşturacağı html dosyasına katacaktır. bu programı çalıştırdığınızda görüntü şöyle olacaktır:
bu görüntüyü aldığınız sırada browser'ınızda kaynağı görüntülerseniz, iki metnin adeta birleştirilmiş olduğunu göreceksiniz. fakat dışardan php programına sadece düz metin eklemeyiz; program veya fonksiyon da ekleyebiliriz. harici dosyada şu değişikliği yaparak, harici_dosya02.x adıyla kaydedin.

kod:
<?php
print ("ben de harici dosyayım.!<br>");
print ("ama ben hesap da yaparım.. örneğin iki iki daha ". (2 + 2). " eder!");
?>
haricã® dosya okuyan programı da programı içinde, okunacak dosya adını düzelttikten sonra dosya_ekle02.php adıyla kaydedin; ve çalıştırın.
haricã® dosyamızda yer alan …iki iki daha ". (2 + 2). " eder!"); şeklindeki ifadenin programa gelirken "..iki iki daha 4 eder!" şekline gelmesinin izahı, php'nin dışarıdan aldığı dosyanın içinde php programı olduğunu gördüğü anda, bu dosyanın içeriğini metin olarak değil, program olarak ele almasıdır. bu yolla, php programlarımıza bir değerin dönmesini de sağlayabiliriz. haricã® dosyamızda şu değişikliği yapalım ve harici_dosya03.x adıyla kaydedelim:

kod:
<?php
$sonuc = ( 2 + 2 );
return $sonuc;
?>
bu satır bakalım programa dahil olacak mı?
sonra, program metninde şu değişlikliği yaparak, dosya_ekle03.php adıyla kaydedin ve çalıştırın:

kod:
<?php
$donen_sonuc = include("harici_dosya03.x");
print ("
<p> harici dosyadan dönen sonuç: $donen_sonuc </p>");
?>
haricã® dosyamızın içindeki program, return komutu ile sadece kendi içinde elde ettiği sonucu, onu çağıran programa verdi; ve bu sonucu alan programımız, sadece kendi içindeki bir değişkenin değerini browser'a gönderdiği halde, bu değer haricã® dosyadan alınmış oldu.
haricã® dosyaların include yoluyla php programlarımıza katılması, özellikle bir sitenin bir çok programında sık sık kullanılan metinlerin ve hesaplamaların bir kere yazılmasını ve tek satırla çağrılmasını sağladığı için kolaylık sağlar ve hata ihtimalini azaltır.
include mu, require mı?
php4.0 ile, include komutu gibi işleyen ancak ondan farklı olarak kendisini çağıran programa değer veremeyen require komutu da kullanılabilir hale geldi. içinde bir hesaplama bulunmayan veya kendisini çağıran dosyaya bir return komutu ile bir değer dönmesini sağlaması beklenmeyen dosyaları require komutu ile de ana programımıza dahil edebiliriz.
include ile alacağımız dosyaların adını php programının oluşturmasını sağlayarak kimi zaman pogramlarımıza dinamizm sağlamamız mümkündür. sözgelimi bir menü maddesinin tıklanmasıyla harekete geçen bir javascript fonksiyonunun, ziyaretçinin gideceği sayfaya göndereceği değeri include komutuna dosya adı oluşturmakta kullanabiliriz. bazen include komutuna dosya adı oluşturmakta program içindeki döngülerden yararlanınız. örnek:

kod:
for ( $i = 1 ; $i <= 3 ; ++$i) {
include ("dosya0" . $i . ".x");
}
haricã® dosyalarımızın adlarının dosya01.x, dosya02.x ve dosya03.x olmalı halinde, bu döngü sırasıyla her üç dosyayı da çağıracak ve altalta ana programa dahil edecektir.

dosyalar hakkında bilgi
php'de yukarıda ele aldığımız include ve require komutları ve biraz sonra değineceğimiz dosya okutma ve yazdırma işlemleri dolayısıyla bir dosyanın varlığı veya yokluğu, ya da bir dosyaya ait sandığımız ismin bid klasöre ait olması, programımızın sağlıklı işleyebilmesi açısından büyük önem taşır. php bu amaçla bize bir kaç kullanıma hazır fonksiyon sağlıyor. burada kısaca bu fonksiyonlara ve nasıl kullanıldıklarına değinelim:

dosya var mı? file_exits()
bir dosyanın var olup olmadığını denetleyen bu fonksiyon, dosya varsa true/doğru, yoksa false/yanlış sonucunu verir. örnek:

kod:
if ( file_exits ( "bir_dosya.txt" ) )
print ("dosya var!");
dosya yoksa, program "dosya var!" yazmadan yoluna devam edecektir.

dosya mı, dizin mi? is_file() ve is_dir()
kimi zaman klasörler de tıpkı dosyalar gibi adlandırılabilir. bir dizinde gördüğümüz ismin gerçekten bir dosyaya ait olup olmadığını bu fonksiyonla sınarız. sınama doğru, yani isim bir dosyaya ait ise fonksiyon true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_file ( "bir_dosya.txt" ) )
print ("bu bir dosyadır!");
isim bir dosyaya ait değilse program "bu bir dosyadır!" yazmadan yoluna devam edecektir. sınamayı ismin bir klasöre ait ait olup olmadığına bakrarak da yaparız. bu durumda is_dir() fonksiyonunu kullanırız. isim bir dizine aitse fonksiyon true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_dir ( "/bir_isim" ) )
print ("bu bir dizindir!");
isim bir dizine ait değilse program "bu bir dizindir!" yazmadan yoluna devam edecektir.

dosya okunabilir mi? is_readable()
programda kullanmaya karar vermeden önce bir dosyanın erişilebilir ve php tarafından okunabilir olup olmadığını sınayan bu fonksiyon, dosya okunabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_readable ( "bir_dosya.txt" ) )
print ("bu dosya okunabilir!");
dosya okunabilir değilse program "bu dosya okunabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz her dosyanın okuma izni bulunmayabilir.)

dosya yazılabilir mi? is_writable()
programda kullanmaya karar vermeden önce bir dosyanın yazılabilir olup olmadığını sınayan bu fonksiyon, dosya yazılabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_writable ( "bir_dosya.txt" ) )
print ("bu dosyaya yazılabilir!");
dosya yazılabilir değilse program "bu dosyaya yazılabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz hatta okuyabildiğimiz her dosyanın yazma izni bulunmayabilir.)

dosya çalıştırılabilir mi? is_executable()
php programında kimi zaman sunucunun kullanmamıza izin verdiği haricã® programları çalıştırız; php programımızın düzgün işlemesi bu harici programa bağlı olabilir. böyle bir programı çalıştırmaya karar vermeden önce bir dosyanın çalıştırılabilir olup olmadığını sınayan bu fonksiyon, dosya çalıştırılabilir ise true/doğru, değilse false/yanlış sonuç verir. örnek:

kod:
if ( is_executable ( "bir_dosya" ) )
print ("bu dosya çalıştırılabilir!");
dosya çalıştırılabilir bir program değilse php programı "bu dosya çalıştırılabilir!" yazmadan yoluna devam edecektir. (unix ortamında varlığını görebildiğimiz her pprogram dosyasının çalıştırma izni bulunmayabilir.)

dosya boyutu: filesize()
adını verdiğimiz dosyanın boyutunu byte olarak bildirir: örnek:

kod:
print ("dosyanın boyutu:");
print filesize( "bir_dosya.txt" );

[ımg]file:///c:/docume%7e1/deadly/locals%7e1/temp/msohtml1/07/clip_image002.gif[/ımg]

dosyaya son erişim tarihi: fileadate(), filemtime() ve filectime()
adını verdiğimiz dosyaya son erişim tarihini bildirir. ne var ki bu bilgi unix'in "epoch" biçimindedir: örnek:

kod:
print ("dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print ( " $dosya_tarihi " );
eğer bu dosyanın son erişim tarihi 28 temmuz 2000, cuma 24:00:00 ise, php, browser penceresine 964731600 yazacaktır. bu komutun ürettiği bilgiyi, date()
kod:
fonksiyonu ile anlaşılabilir hale getirebiliriz:
print ("dosyanın son erişim tarihi:");
$dosya_tarihi = fileadate( "bir_dosya.txt" );
print date("d d m y g:i:s h", $dosya_tarihi );bu kez php browser penceresine 28 jul 2000 242:00:00 00 yazdıracaktır. tarih verilerinin date() fonksiyonu ile biçimlendirilmesini daha sonra ayrıntılı ele alacağız.
filemtime(), bir dosyanın son değiştirildiği tarihi; filectime(), ise oluşturulduğu tarihi, yine unix epoch biçiminde bildirir; bu verinin anlaşılır biçimde görüntülenmesi için php'nin date() fonksiyonu kullanılır.

dosyalar oluşturma ve silme
php ile yapabileceğimiz önemli dosya işlemlerinin başında olmayan bir dosyayı oluşturmak ve olan bir dosyayı silmek gelir. php'nin dosya oluşturma komutu touch() fonksiyonudur. bu fonksiyona oluşturulmasıın istediğimiz dosyanın adını vermemiz gerekir. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
</body>
</html>
bu programı kişisel web sunucuda denerken yeni dosyanın oluşturulacağı dizin olarak "/" işaretiyle sadece kökdizini belirtirseniz, dosya c: diskinde kökdizinde oluşturulur. bu programı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
bu komutla oluşturacağınız dosya içi boş bir metin dosyası olacaktır. eğer belirttiğiniz dizinde bu adı taşıyan bir dosya varsa, php dosyanın içeriğine dokunmayacak, fakat dosyanın erişim ve değişim tarihlerini değiştirecektir.
php ile mevcut bir dosyayı silmek için unlink() fonksiyonunu kullanırız. bu fonksiyon da silinecek dosyanın adı ile birlikte yolunu ister. örnek:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
unlink ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı dosya silindi!");
?>
bu komut windows sistemlerinde işlemeyebilir.

dosya açma
php'de bir dosyanın içeriğini alarak sayfalarımızda kullanma veya bir dosyanın içeriğini değiştirmek gibi işlemler için önce dosyanın açılmış olması gerekir. bunu gerçekleştiren fopen() fonksiyonudur. bu fonksiyonla bir dosyayı okumak ('r'), yazdırmak ('w') veya ek yapmak ('a') için açabiliriz. bu fonksiyon dosyanın başarıyla açılması halinde bir tamsayı verecektir. php programlarımızda, açılan dosyanın mutlata ona işaret eden bir değişkene (file pointer) bağlı olması gerekir; daha sonra bu dosya ile ilgili bütün işlemleri bu işaret değişkeni ile yaparız. örnek:

kod:
$dosya = fopen( "bir_dosya.txt" , 'r' );
php, bu dosyayı sadece okumak amacıyla açacak ve fonksiyondan dönen değeri $dosya değişkenine atayacaktır. olmayan bir dosyayı açmak istediğimiz zaman php hata mesajı verir. bir dosyayı yazmak amacıyla açacağımız zaman, bu kodu şöyle yazarız:

kod:
$dosya = fopen( "bir_dosya.txt" , 'w' );
olmayan bir dosyayı yazmak amacıyla açmak istediğimizde php önce bu dosyayı oluşturur. bir dosyaya ek yapmak istediğimiz zaman ise kodumuz şu şekilde yazılır:

kod:
$dosya = fopen( "bir_dosya.txt" , 'a' );
olmayan bir dosyayı ek yapmak amacıyla açmak istediğimizde php hata mesajı verir.

bir fonksiyonu durdurmak için: öl!
bir php fonksiyonunun kendisinden beklenen işi yapamaması halinde oracıkta durdurulmasını die() komutu sağlar. "öl!" anlamına gelen bu fonksiyona ekranda görüntülenmesini istediğimiz bir metni parametre olarak verebiliriz. bu bölümdeki örnekler bu komutla birlikte şöyle yazılabilir:
$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("dosya açılamıyor!") ;
bu komutu kişisel web sunucusunda denerken, dosyanın açılacağı dizinin yolunu belirtmemiz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
php, bu dosyayı açtığında browser penceresinde dosyanın açıldığını belirten mesajı görüntülecektir. bu işlemi ınternet'teki bir web sunucuda uygulayabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?php
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
açtığımız bir dosya ile yaptığımız bütün işlemler bittikten sonra, dosyanın kapatılması gerekir. dosya kapatma işlemini fclose() fonksiyonu yapar. bu fonksiyona parametre olarak dosya adını değil, dosyanın işaretçisi olan değişkenin adını veririz. örnek:

kod:
fclose ( $dosya );
dosya okuma: fgets(), fread() ve fgetc()
açtığımız bir dosyanın içindeki yazıları çoğu zaman programımıza satır satır okuturuz. php'de bir dosyanın içeriğini satır satır okutmamızı fgets() fonksiyonu sağlar. bu fonksiyona daha önce açılmış olan dosyanın işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü parametre olarak veririz. fgets() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir. bu fonksiyonu çoğu zaman bir döngünün içinde kullanırız. ancak döngünün hata vermemesi için, php'nin dosyanın sonuna ulaştığında döngüyü durdurmamız gerekir. fgets() fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilir ve daha sonra bu değeri programlarımızda kullanabiliriz. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya ) ) {
$satir = fgets ( $dosya, 1024 ) ;
print ("$satir<br>");
}
fclose ($dosya);
?>
bu program kişisel web sunucuda önce varolan bir dosyayı açıyor; ve bu dosyanın işaretçisi olarak $dosya değişkenini kullanıyor. daha sonra bir while() döngüsü içinde bu değişkeni ve 1 kb (1024 byte) ölçüsünü parametre olarak vererek fgets() fonksiyonu ile dosyadan bir satır okutuyoruz. fgets() fonksiyonundan dönen bir satırlık metni, burada $satir değişkenine atıyoruz; ve daha sonra print() fonksiyonu ile bu satırı browser penceresine gönderiyoruz. bu işlemi ınternet'teki bir web sunucuda uygulayabilmek için yazma/okuma izni bulunan ve web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. bu işlemin içinde yapıldığı while() döngüsünün devam şartı olarak kullandığımız ifadede yer alan feof() fonksiyonu bir dosyanın dosya-sonu (end-of-file) durumuna ulaşıp ulaşmadığını sınar. php, her dosyanın sonunda yer alan eof (ctrl-z, ^z) işaretine eriştiği anda feof() fonksiyonu doğru/true değerini verir. while() döngüsü, feof() doğru değilken devam etmek üzere kurulmuş olduğu için, dosya sonuna ulaştığımızda döngü duracaktır. okuma işlemini durabilen bir döngüye bağlamazsak, fgets() php'nin bir programın sona ermesi için verilmiş varsayılan süresi doluncaya kadar dosyayı okumak isteyecektir.
kimi zaman dosyalarımızın içeriğini satır-satır okutmak yerine, kendi tayin edeceğimiz uzunlakta parçalar halinde okutmak isteriz. bunu, fread() fonksiyonu ile sağlarız. örnek:

kod:
<?php
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya) ) {
$paragraf = fread ( $dosya, 1024 ) ;
print ("$paragraf<br>");
}
fclose ($dosya);
?>
fread() fonksiyonu da daha önce açılmış olan dosyanın işaret değişkenin adını ve okunmasını istediğimiz asgari byte ölçüsünü parametre olarak alır. fread() fonksiyonu verdiğimiz uzunluk ölçüsüne ulaşmadan önce dosyada bir yeni satır işareti görürse, veya dosyanın sonuna ulaşırsa, okumaya son verir. bu fonksiyondan yararlanırken, verdiğiniz uzunluk ölçüsünün, almak istediğiniz metin parçasına uygun olduğunu sınamalısınız. fread(), bu ölçüye ulaştığında okumayı keser. buradaki örneği 1024 byte ölçüsünü değiştirerek ve mesela 1, 2, 3 yaparak deneyebilir ve böylece vereceğiniz ölçünün okunan metnin uzunluğunu nasıl tayin ettiğini görebilirsiniz.
fseek() ile ölçü belirleme
php'nin dosya işleminde kullabileceğiniz bir diğer fonksiyonu fseek() adını taşır. daha önce açılmış olan dosyanın işaret değişkenin adını ve ve programın bu metin içinde zıplamasını istediğiniz noktanın dosyanın başından itibaren byte değerini parametre olarak alan bu fonksiyon ile, bir dosyanın içinnde istediğimiz yere gitme imkanı vardır. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
if ($dosya = (fopen ($dosya_adi , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
$dosya_boyut = filesize($dosya_adi);
$olcu = (int) ($dosya_boyut / 2 );
while ( ! feof ($dosya) ) {
$paragraf = fread ( $dosya, $olcu) ;
print ("$paragraf<br>");
}
fclose ($dosya);
?>
burada, okutulacak dosyanın boyutunun yarısını atadığımız $olcu değişkenini, okutulacak metnin ölçüsü olarak kullanıyoruz. bu durumda php, dosyayı iki paragraf halinde görüntüleyecektir.
dosyalarımızın içeriğini satırlar veya belirli ölçüde parçalar halinde değil de, tek-tek karakter olarak okutmak için fgetc() fonksiyonundan yararlanırız. bu fonksiyon, daima 1 byte ölçüsünde (bir karakter) metin okuyabileceği için, parametre olarak sadece daha önce açılmış olan dosyanın işaret değişkenin adını alır. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
if ($dosya = (fopen ($dosya_adi , 'r') ) ) {
print ("dosya açıldı!<br>");
}
else {
print ("dosya açılamadı!");
}
while ( ! feof ($dosya) ) {
$karakter = fgetc ( $dosya ) ;
print ("$karakter<br>");
}
fclose ($dosya);
?>
burada fgetc() fonksiyonundan dönen değeri (yani dosyadan okunan bir karakteri), $karakter değişkenine atıyoruz ve daha sonra print() fonksiyonu ba karakteri ve html'in satır bölme kodu olan <br> işaretini browser penceresine gönderiyor. programı bu şekliyle sınarsanız, dosyadaki metnin tek karakter olarak browser penceresinin soluna dizildiğini göreceksiniz. programı <br> kodunu silerek çalıştırırsanız, bu kez dosyadaki metinde var olan satır sonu işaretlerinin de kaldırıldığını ve metnin bir paragraf oülarak görüntülendiğıini görebilirsiniz.

dosyaya yazma ve ek yapma: fwrite() ve fputs()
bir dosyaya yazma veya ek yapma, php açısından aynı işlemdir; sadece dosyaların açılışında fark vardır. hatırlayacaksınız, bir dosyayı yazmak amacıyla açmak için:

kod:
$dosya = fopen( "bir_dosya.txt" , 'w' ) or die ("dosya açılamıyor!") ;
ek amacıyla açmak için ise

kod:
$dosya = fopen( "bir_dosya.txt" , 'a' ) or die ("dosya açılamıyor!") ;
kodunu yazmamız gerekir. dana sonra yapılacak yazma ve ekleme işlemlerinin farkı, 'w' parametresi ile açılan dosyaya yazma işlemi en başından başlar ve devam eder; 'a' parametresi ile açaılan dosyaya yazma işlemi ise en sondan başlar ve devam eder.
php'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() ve fputs() aynı biçimde yazılır ve aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
$dosya = fopen ($dosya_adi , 'w') or die ("dosya açılamadı!");
$metin = "bu satır dosyaya yazılacak: merhaba dünya!
";
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , "bu satır ise sonradan eklenecek
" ) ;
fclose ($dosya);
?>
bu programı çalıştırdığınızda, bir_dosya.txt adlı dosyada mevcut bütün içerik silenecek ve yerini $metin değişkeninin içerdiği "bu satır dosyaya yazılacak: merhaba dünya!" yazısı ile "bu satır ise sonradan eklenecek" cümlesi alacaktır. her iki metnin sonunda da yeni satır işareti bulunduğuna dikkat edin. bu programda dosya açma kıomutundaki 'w' parametresini siler, yerine 'a' yazarsanız, bu metinlerin dosyanın içeriğine eklendiğini görebilirsiniz.

kullanımdaki dosyayı kilitleyin!
web sunucusundaki dosyalarımızla sadece bir kişi işlem yapıyor olsa idi, bir sorun olmazdı; ne var ki, bir web sitesine aynı anda birden fazla kişi eriyebilir ve dosyalarla işlem yapan programları çalıştırıyor olabilir. bu, php'nin dosya işlemlerine engel olabilir. bu sebeple, işlem için açacağımız bir dosyayı, önce kilitlemek yerinde bir önlem sayılır. bunu, flock() fonsiyonu ile yaparız; bu fonksiyona kilitlemek istediğimiz dosyanın işaret değişkeninin adını ve kilit türünü belirten endeks sayısını parametre olarak yazarız. örnek:

kod:
<?php
$dosya_adi = "/inetpub/wwwroot/bir_dosya.txt";
$dosya = fopen ($dosya_adi , 'w') or die ("dosya açılamadı!");
flock ( $dosya , 2); // dosyayı kilitle
$metin = "bu satır dosyaya yazılacak: merhaba dünya!
";
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , "bu satır ise sonradan eklenecek
" ) ;
flock ( $dosya , 3); //dosyayı kilidini aç
fclose ($dosya);
?>
bu fonksiyon ile kullanabileceğimiz endeks parametreleri şunlardır:
1 paylaşım diğer proseslerin dosyayı paylaşmalarına imkan verir
2 tam diğer proseslerin dosyaile işlem yapmasına engel olur
3 serbest dosyanın 1 veya 2 olan kilidini kaldırır
bir dosya, herhangi bir php programı tarafından kilitlendiği anda, aynı dsyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı gösterirler.

dizinlerle işlemler
php ile sunucuda, web dizini olarak kullandığımız alanda yeni dizinler oluşturabiliriz, silebiliriz, ve bunlar hakkında bilgi edinebiliriz. bu işlemleri web sunucuda yapabilmek için web dizininde okuma ve yazma izni bulunması gerekir.

kaynak: ordan burdan

php ile kodlanmış basit bir arama programının kaynak kodlarını merak edenler için hazırlanmış kısa ama etkili bir uygulama. veri tabanları üzerinde arama yapmadığını hatırlatmakta fayda var.

kod:

<html>
<body>

<?php

if (empty ($ara) ): ?>

<form action="<? echo $php_self; ?>" method="post">
<input type="text" name="ara">
<input type="submit" value="ara">
</form>

<?

else:

$klasor = "/apache/htdocs" ;
$klasor_ac = opendir ($klasor);

while ( $file = readdir ($klasor_ac ) ) {

if (stristr ($file, ".php") || stristr ($file, ".htm") ) {

$ac[$i] = @fopen ($file, 'r');
$oku[$i] = fread ( $ac[$i], filesize ($file) );

if ( eregi ($ara, $oku[$i] ) ) {
echo "$file<br>
";
}

}

$i++;
}

closedir ($klasor_ac);

endif;

?>

</body>
</html>

kaynak: ordan burdan

dizi değişkenden ayrıntılı söz edebilmek için önce tipik bir dizi-değişkende neler olduğuna bakalım. sözgelimi, verdiğiniz "php ile programlama" kursundaki öğrencilerinizin listesi şöyle olabilir:

öğrenci no adı soyadı sınav-1 sınav-2 not
1 özbay altun .. .. ..
2 muharrem taç .. .. ..
3 erhan mataracı .. .. ..
4 hasan civelek .. .. ..
5 şahika tabak .. .. ..

dizi değişken oluşturalım
şimdi, php bize öyle bir araç vermeli ki, biz bir kerede bu listenin tümünü, her bir ögesine sanki bir değişkenin değeri imiş gibi tek-tek, veya bir kaçına birden ulaşabilmeli ve arzu ettiğimiz zaman notları doldurabilmeliyiz. öğrenciler de yapacağımız web sitesine girerek, kendi notlarını görebilmeli ve notlarını inceleyebilmeli. php'nin bu amaçla sağladığı araç, çok-boyutlu dizi-değişken oluşturma aracıdır. ve bu araçla yukarıdaki listeyi aynen şöyle yapabiliriz. bu kodu dizi_degiskenler01.php adıyla kaydedin:

kod:
<html>
<head>
<tıtle>php'de degiskenler</tıtle>
<meta http-equiv="content-type" content="text/html; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/html; charset=windows-1254">
</head>
<body>
<b>
<h2>
<?php
$ogrenciler = array (
array ( adi => "özbay", soyadi => "altun", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "muharrem", soyadi => "taç", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "hasan", soyadi => "civelek", sinav1 =>"", sinav2 =>"", not =>""),
array ( adi => "şahika", soyadi => "tabak", sinav1 =>"", sinav2 =>"", not =>""),
);
// buraya başka kodlar girecek
print $ogrenciler[0][adi];
?>
</h2>
</b>
</body>
</html>programdaki "print()" komutunu sadece dizi değişkeni doğru yazıp yazmadığımızı sınamak amacıyla yazdık; bu programı browser'da açtığınızda yazdığınız ilk ismi browser penceresinde görüyorsanız, dizi-değişkeni doğru şekilde oluşturdunuz demektir. burada, array() komutnu yazarken, süslü parantez değil, normal parantez kullandığımıza ve herbir elemanın değerlerinin sonunda vrigül olduğuna dikkat edir. bir diğer önemli nokta: endeks adları bir kelimeden fazla ise bunları tırnak içine alarak belirtmektir. örneğin:

kod:
array ( adi => "özbay", soyadi => "altun", "sinav 1 notları" =>"", "sinav 2 notları" =>"", "toplam not ortalamasi" =>""),burada, daha öncekilere benzer bir şekilde adlandırılmış $ogrenciler değişkenin içeriğini array() komutu ile doldurduğumuzu görüyoruz. array() ile böyle çok boyutlu ve içerdiği değerlerin her birinin bir "endeks adı" olan dizi-değişkene ilişkili dizi (associative array) de denir. perl bilenler ise bu tür değişkenlere "hash" dendiğini hatırlayacaklardır. ilişkili dizi'lerin birinci satırı 0, ikinci satırı 1, üçüncü satırı 2.. diye numaralandırılır. bu dizinin o satırındaki kaydın sıra endeksidir. ayrıca burada "adi," "soyadi," "sinav1" .. dizi değişkenin içindeki değerlerin endeks adıdır. yani bu değerlere atıfta bulunurken, referans yaparken veya bu değerleriekullanmak amacıyla erişirken sıra endeksi ve endeks adıyla hitabederiz. yukarıdaki sınama amaçlı print() komutuna bakarsanız, birinci öğrencinin ismini "[0][adi]" olarak çağırıyor.
çok elemanlı ilişkili dizi oluşturmanın bir diğer yolu, yeri geldiğinde böyle bir dizi için yeni bir üye ilgili bilgileri eleman endeksi ve değerler için endeks adı belirterek şöyle bir kod yazmaktan ibarettir. dizi_degiskenler01.php dosyasında şu değişikliği yaparak, dizi_degiskenler02.php adıyla kaydedin

kod:
<?php
$ogrenciler[0][adi] = "özbay";
$ogrenciler[0][soyadi] = "altun";
$ogrenciler[0][sinav1] = "";
$ogrenciler[0][sinav2] = "";
$ogrenciler[0][not] = "";
// buraya buraya başka kodlar girecek
print $ogrenciler[0][adi];
?>bir dizi değişkende kaç boyut olacaksa, o kadar içiçe array() ögesi oluşturabiliriz. buna göre tek boyutlu bir dizi değişken sadece bir array() komutu ile ve sadece değerler verilerek oluşturulabilir. diyelim ki yukarıdaki öğrenci listemiz sadece öğrencilerin isimlerinden oluşacak. bu durumda $ogrenciler değişkenine ilişkin satırı şöyle yazabilirdik:

kod:
$ogrenciler = array ("özbay", "muharrem", "hasan", "şahika");php, böyle tek boyutlu bir dizinin örneğin birinci elemanını, "$ogrenciler[0]" adıyla bilir. böyle bir tek-boyutlu diziyi oluşturmak için php bize başka bir kolaylık da sağlar: array() komutunu kullanmadan, doğruca dizinin ögelerine değer vermemiz mümkündür. yukarıdaki programın sadece php bölümünü şöyle değiştirerek, dizi_degiskenler03.php adıyla kaydedin:

kod:
<?php
$ogrenciler[] = "özbay";
$ogrenciler[] = "muharrem";
$ogrenciler[] = "hasan";
$ogrenciler[] = "şahika";
// buraya başka kodlar girecek
print $ogrenciler[0];
?>böyle sırayla dizi değişken oluşturur veya oluşturulmuş bir dizi değişkene ek yaparken, değişkenin sıra numarasını yazmazsak, php bunları kendisi sıralar. yukarıdaki kodun da browser penceresine "özbay" yazdırması gerekir. mevcut tek-boyutlu bir dizi değişkene ek yaptığımızda, be yeni değerin dizinin en altına eklenmesini istiyorsak, sıra numarası yazmamıza gerek yoktur. mevcut değerlerden birini değiştirmek istiyorsak, o değerin sıra numarasını yazmamız gerekir. bunu denemek için yukarıdaki kodu şöyle değiştirilim ve dizi_degiskenler04.php adıyla kaydedelim:

kod:
<?php
$ogrenciler[] = "özbay";
$ogrenciler[] = "muharrem";
$ogrenciler[] = "hasan";
$ogrenciler[] = "şahika";
// buraya başka kodlar girecek
$ogrenciler[0] = "emre";
$ogrenciler[15] = "özbay";
print ("dizideki 1'nci isim: $ogrenciler[0] <br>");
print ("dizideki 2'nci isim: $ogrenciler[1] <br>");
print ("dizideki 3'ünci isim: $ogrenciler[2] <br>");
print ("dizideki 4'üncü isim: $ogrenciler[3] <br>");
print ("dizideki 5'inci isim: $ogrenciler[4] <br>");
print ("dizideki 6'ncı isim: $ogrenciler[5] <br>");
print ("…………..<br>");
print ("dizideki 15'nci isim: $ogrenciler[15] <br>");

?>bu programın browser penceresine göndereceği sırada, birinci öğrenci ($ogrenci[0]) olarak bu kez özbay değil emre yazdığını göreceğiz.
bunun sebebi, diziyi oluşturan ilk grup deyimden sonra,
$ogrenciler[0] = "emre";
satırı ile birinci elemanın değerini değiştirmiş olduk. 15'nci elemana atama yapmakla, php'nin $ogrenciler dizisinde 6, 7, 8, 9,.. 14'e kadar boş elemanlar oluşturmasına sebep olduk.
tek boyutlu dizileri de ilişkili dizi olarak oluşturabilir yani değerlere endeks adı verebiliriz. daha önce kaydettiğimiz dosyada şu değişikliği yapalım ve dizi_degiskenler05.php adıyla kaydedelim:

kod:
<?php
$ogrenci[adi] = "özbay";
$ogrenci[soyadi] = "altun";
$ogrenci[sinav1] = "";
$ogrenci[sinav2] = "";
$ogrenci[not] = "";
// buraya başka kodlar girecek
print $ogrenci[adi];
?>php, $ogrenci adlı değişkenin beş ayrı değeri olduğunu ve bunların "adi," "soyadi," "sinav1"… olduğunu biliyor. şimdi artık istediğimiz noktada bu değişkenin istediğimiz değerine, o değerin endeks adını yazarak, çağrıda bulunabiliriz; bu değeri yeniden verebiliriz.

dizi değişkenleri kullanalım
yukarıdaki paragrafta "..değişkenin istediğimiz değerine, o değerin endeks adını yazarak, çağrıda bulunabiliriz.." dediğimizi görmüş olmalısınız. dizi veya tekil, değişkenleri oluşturmamızın sebebi, tuttukları değerleri programımızın gereği olan şekilde ve yerde kullanmaktır. sadece bir değer tutan değişkenleri örneğin print() komutu ile sık sık kullandık. yukarıda dizi değişken örneklerinde de bazı değişkenleri ve değerlerini çağırdık. ancak dizi değişkenlerin değerlerinden yararlanabilmek için başka araçlar da vardır.
herşeyden önce dizi değişkenlerin büyüklüğü, boyutu bizim için önem taşıyabilir. özellikle bir veritabanı dosyasını okutarak oluşturacağımız dizi değişkenin kaç elemanı ve her bir elemanın kaç ögesi bulunduğunu bilmemiz gerekebilir.
bir dizi değişkenin kaç elemanı bulunduğu, o değişkenin count() özelliği sorgulanarak öğrenilir. count(), dizideki eleman sayısını verir. şimdi bunu bir örnekle görelim. daha önce kaydettiğimiz dizi_degiskenler04.php dosyasını açın ve php bölümünde şu değişikliği yaparak dizi_degiskenler06.php adıyla kaydedin:

kod:
<?php
$ogrenciler[] = "özbay";
$ogrenciler[] = "muharrem";
$ogrenciler[] = "hasan";
$ogrenciler[] = "şahika";
// buraya başka kodlar girecek
print ("$ogrenciler adlı dizide ". count($ogrenciler) ." adet eleman var.");
?>bu program browser penceresine dizimizde 4 eleman bulunduğunu bildirecektir. şimdi işleri biraz karmaşık hale getirelim! yukarıdaki kodun, print() satırının yerine şu satırları ekleyerek, dizi_degiskenler06a.php adıyla kaydelim.

kod:
print ("$ogrenciler adlı dizide ". count($ogrenciler) ." adet eleman var.");
print ("<br><br>");
for ($sayac=1 ; $sayac <= count($ogrenciler) ; $sayac++ ) {
print ("$ogrenciler dizisinin ". $sayac ."'ncı elemanı: " . $ogrenciler[$sayac] ."<br>");
}bu programı çalıştırmadan önce, eklediğimiz satırları irdeleyelim. ilk print() komutunun browser penceresine "yazdıracağı" metinde geçen ters bölü işaretini hatırlıyor olmalısınız. bu, tek veya çift tırnak içine de almış bile olsak, php'nin, bir değişken adını gördüğü zaman onun yerine o değişkenin tuttuğu değeri yazması sebebiyle, $ işareti gibi php için özel anlamı olan işaretlerin anlamlandırılmasını önlemek için yaptığımız ve adına o karakteri kurtarma veya escaping dediğimiz işlemdir. bu işlemle, php'nin anlamlı işaret değil de metin saymasını istediğimiz karakterlerin önüne ters bölü işareti koyarız: " gibi. buradaki örnekte, bu sayede php "$ogrenciler" kelimesini değişken adı olarak değil, düz metin olarak görüyor. ki, aynı komutta aynı kelimeyi tekrar kullandığımızda bu kez değişken adı olarak kullanıyoruz ve bu değişkenin count() ögesinin değerini öğreniyoruz. $ogrenci değişkenin "özbay," "muharrem," "hasan" ve "şahika" değerleri bulunduğuna göre, bu değişkenin count()'u 4 olacaktır. ("ozbay" = 0, .. "şahika" = 3 olmak üzere..) bu print() komutu, browser penceresine tahmin ettiğiniz gibi "$ogrenciler adlı dizide 4 adet eleman var." yazdıracaktır. ikinci print() satırı ise ekrana ardarda iki yeni satır işareti gönderecektir.
şimdi karışık noktaya geliyoruz! burada bir for döngüsü başlıyor. önce döngünün kaç kez tekrar edeceğini belirleyecek olan değişkeni tanımlıyoruz: $sayac. sonra bu sayacın kaça kadar çıkacağını belirliyoruz. bu sayıyı, bize yine count() veriyor. ve tabiã® for döngüsünün devam edebilmesi için gerekli son unsur olan, sayacın arttırılmasını sağlayan deyim var. programımız bu döngünün içinde, yani dört kez, her seferinde dizinin bir elemanın adını browser penceresine gönderiyor. şimdi, hatırlayacaksınız, dizi değişkenlerin elemanlarının bir sıra sayısı vardı. örneğin "şahika" değeri, dizinin 3 numaralı, yani dördüncü elemanı; ve bu elemanın değerini ekrana göndermek için şu komutu vermemiz yeterli:

kod:
print ($ogrenciler[4]);programda ise buradaki endeks sayısını, $sayac değişkeninin o andaki değerinden alıyoruz. döngünün her seferinde bu değer bir artacağı için bize $ogrenciler değişkeninin o anda hangi elemanının değeri çağırmak istiyorsak, o elemanın endeksini vermiş olacaktır. ve sonuç olarak programımız, dizideki bütün değerleri browser'a gönderecektir.
kimi zaman buradaki örnekte olduğu gibi, dizinin bütün elemanlarını bir for döngüsüyle değil, foreach döngüsüyle bulmak daha kolay olabilir. kısaca belirtmek gerekirse, foreach döngüsü, bir dizi değişkenin bütün elemanları için, arzu ettiğiniz işi yapar. foreach döngüsünü yazarken komutun kaç kere icra edileceğini bir sayaçla tutmak gerekmez; çünkü döngü, ona adını verdiğiniz değişkenin içindeki bütün değerler bitinceye kadar devam edecektir. yukarıdaki örnekteki bütün print() ve for satırlarını atarak yerine şunları yazıp ve dizi_degiskenler06b.php adıyla kaydelim.

kod:
foreach ($ogrenciler as $ogrenci) {
print ("$ogrenci<br>");
}foreach döngüsü, bir dizi değişkenin adını içinden değer çekilecek kaynak olarak ister; bunu "as" (olarak) kelimesi izler; sonra diziden alınacak her bir değeri geçici olarak tutacak değişkenin adı verilir. buradaki print() komutumuz, bu geçici değişkenin tuttuğu değeri browser'a gönöderecektir. bu değer ise döngünün her adımında dizi değişkendeki bir değer yani öğrencilerin listesi olacaktır.
dizi elemanlarının farklı özelliklerine ilişkin değerlere endeks adı verdiğimiz ilişkili dizilerde ise eleman değerlerini çağırmak foreach döngüsünün biraz farklı yazılmasını gerektirir. perl'e aşina alanların bu dizi türüne "hash" dendiğini hatırlayacaklardır. php'de de perl'ün hash türü değişkenlerinde olduğu gibi, endeks adlarına "anahtar" (key), bu endeksin belirlediği değere ise (evet, doğru tahmin ettiniz!) değer (value) denir. ilişkili dizilerden değer almak üzere foreach döngüsü yazılırken, değerin anahtarını ve değerin kendisini iki geçici değişkene yazmamız gerekir. daha önce yazdığımız dizi_degiskenler05.php adlı dosyayı açarak mevcut tek satırlık print() kodunun yerine şunları yazın ve dizi_degiskenler07.php adıyla kaydedin:

kod:
foreach ($ogrenciler as $anahtar=>$deger) {
print ("$anahtar = $deger<br>");
}bu kodu çalıştırmadan önce foreach döngüsü üzerinde kısaca duralım: döngü, $ogrenciler dizisini okumaya başladığında içinde, benzetme yerinde ise, iki sütun, ve bir çok satırlar bulacaktır. bu sütunlardan birincisi, ikinci sütundaki verinin adıdır; foreach, birinci sütundaki veriyi alarak $anahtar adlı geçici değişkenin değeri olarak atayacak; sonra ikinci sütuna geçecek ve bunu alarak $deger adlı geçici değişkenin değeri yapacaktır. döngü, daha sonra print() komutunu icra edecektir. print() ise ve geçici $anahtar değişkeninin değerini, ardından eşittir işaretini ve son olarak da geçici $deger değişkeninin değerini browser'a gönderecektir. print() komutunun icrası bitince, foreach, kendisine verdiğimiz $ogrenciler değişkeninde anahtar-değer çiftini ele almadığı satır kalıp kalmadığına bakacak, ve elemanların tümü bitinceye kadar bu işlemi tekrar edecektir. tabiã®, sonuç anahtar ve değerlerin altalta sıralanması olacaktır.
bir de bu bölümün en başında ele aldığımız çok elemanlı ilişkili diziler vardı. onların içindeki değerleri acaba nasıl alabilir ve kullanabiliriz? tabiã® yine bir döngü ile. fakat bu kez, döngü-içinde-döngü kullanmak zorundayız. böyle bir diziyi gözümüzde canlandırırsak, belki neden iki döngüye ihtiyaç olduğununu daha iyi görebiliriz. gözümüzün önüne bir tablo getirelim: dizinin her bir elemanı (bizim öğrenimizde öğrenciler9 bir satırda yer almış olsun; sütunlar olarak da bu elemana ait değerler yer alıyor. sütun başlığı ise, bu değerin endeksi olan anahtar! şimdi bu bölümün başında yazdığımız dizi_degiskenler0i.php adlı dosyayı açalım tek satırlık print() komutunun yerine şu satırları yazarak dizi_degiskenler08.php adıyla kaydedelim:

kod:
foreach ( $ogrenciler as $ogrenci ) {
foreach ( $ogrenci as $anahtar => $deger ) {
print ("$anahtar = $deger <br> ");
}
print ("<br>");
}kısaca irdelersek, bu kodda foreach döngüsünün önce çok-boyutlu değişkenimizin bir satırını içindeki bütün anahtar+değer çeftleri ile ele alıp, tümünü $ogrenci adlı değişkene geçici olarak yerleştirdiğini görüyoruz. bu foreach döngüsünün ilk işi yeni bir foreach döngüsü başlatmak oluyor. yeni foreach ise sazı eline alır almaz, önce, kendisi çok ögeli bir değişken olan (çünkü içinde bir öğrenciye ait, tüm değişkenler ve onların endeks adları var) $ogrenci değişkeninin içindeki anahtar ve değer çiftlerini tek-tek, $anahtar ve $deger değişkenlerine yerleştiriyor; sonra print() komutu ile, aralarına eşittir işareti koyarak bu değişkenlerin değerlerini browser penceresine gönderiyor. bu döngü biter bitmez, ilk foreach yaptıracağı işlere kaldığı yerden devam ediyor; ve ekrana bir yeni satır komutu gönderierek, başa dönüyor; bu kez çok boyutlu dizi değişkenin yeni bir elemana geçiyor. taa ki, dizinin bütün elemanları ve elemanların bütün ögeleri bitinceye kadar.
bu noktada bir uyarı: gerçek programda bir dizinin elemanlarına ilk ulaştığımızda, elemanın içinde değer bulunup bulunmadığını anlamak yerinde olur. bunu is_array() fonksiyonu ile yapabiliriz. bu fonksiyon, dizinin içinde değer varsa, true/doğru, yoksa false/yanlış karşılığını verecektir. buradaki örnekte, ilk foreach satırından hemen sonra:

kod:
is_array( $ogrenci )satırını koyarak, dizinin o anda okunan elemanın içinde değer bulunup bulunmadığını anlayabiliriz.

dizi değişkenlerin düzenlenmesi
dizi değişkenlerin daha verimli şekilde kullanılması için php bize bir takım araçlar sağlar. bunlarla dizi değişkenleri birleştirebiliriz; içinden kesit alabiliriz, sıralayabiliriz veya bazı elemanlarını silebiliriz. şimdi kısaca bu işlemleri ele alalım:

dizileri birleştirme: array_merge()
iki veya daha fazla dizinin bütün elemanlarını birleştirerek, ortaya yeni bir dizi çıkartır. örnek:

kod:
$birinci_dizi = array ( "özbay" , "muharrem" , "hasan" , "şahika" );
$ikinci_dizi = array ( "altun" , "taç" , "civelek" , "tabak" );
$yeni_dizi = array_merge ( $birinci_dizi, $ikinci_dizi );bu kod ile oluşturulan $yeni_dizi isimli dizi değişkenin hangi elemanlara sahip olduğunu, şöyle bir kodla görebilirsiniz:

kod:
foreach ( $yeni_dizi as $yeni_eleman ) {
print (" $yeni_eleman <br>");
}ikinci dizinin bütün elemanları, birinci dizinin elemanlarının arkasına eklenmiş olmalı. array_merge() işlemi, çok-boyutlu ilişkili dizilere de uygulanabilir; php iki dizideki uyumlu-uyumsuz, yani birinde olan diğerinde olmayan bütün anahtar+değer çiftlerini yeni dizide de oluştur. (array_merge() işleminden sonra birleştirilen dizilerin değişmeden kaldığına dikkat edin.)

dizilere değişken ekleme: array_push()
bir diziye yeni değişkenler eklemek için, array_push() fonksiyonuna mevcut dizinin adını ve yeni değerleri yazarız. örnek:

kod:
$birinci_dizi = array ( "özbay" , "muharrem" , "hasan" , "şahika" );
$yeni = array_push ($birinci_dizi, "altun" , "taç" , "civelek" , "tabak" );burada $yeni adlı değişken sadece $birinci_dizi adlı dizinin yeni eleman sayısını tutar. array_push(), kendisine adını verdiğimiz dizinin içeriğini değiştirir. yukarıdaki örnekte içine yeni değerler yazılan dizinin elemanlarını görüntülemek için şöyle bir kod yazabiliriz:

kod:
print ("$birinci_dizi adlı dizide $yeni_dizi adet değişken var<br>");
foreach ( $birinci_dizi as $ogrenci ) {
print ("$ogrenci <br> ");
}dizinin ilk elemanını silme: array_shift()
bir dizi-değişkenin ilk elemanını tümüyle silmek için array_shift() fonksiyonunu kullanırız. bu fonksiyona sadece birinci elemanı silinecek dizinin adını vermek yeter. örnek:

kod:
$birinci_dizi = array ( "özbay" , "muharrem" , "hasan" , "şahika" );
$silinen = array_shift ($birinci_dizi);array_shift(), adını verdiğiniz dizinin içeriğini değiştirir; buradaki örnekte, $silinen adlı değişken dizinin silinen birinci elemanın değerini tutar.

diziden kesit alma: array_slice()
bir dizi-değişkenin bütün elemanları yerine bir kesitini kullanmak istiyorsak, bunu array_slice() fonksiyonu ile yapabiliriz. bu fonksiyona kesit alınacak dizinin adı, kesitin başladığı yer ve kaç adet değişken alınacağı argüman olarak verilir. örnek

kod:
$birinci_dizi = array ( "özbay" , "muharrem" , "hasan" , "şahika", "altun" , "taç" , "civelek" , "tabak");
$kesit = array_slice ($birinci_dizi , 3, 4);burada, php'ye $kesit adlı yeni dizi değişkene, $birinci_dizi adlı dizinin 3'ncü değerinden itibaren (3 dahil) dört değeri yerleştirmesini bildiriyoruz. array_slice(), adını verdiğimiz değişkenin içeriğine dokunmaz; yeni dizi değişken oluşturulur.

dizileri sıralama: sort() ve rsort()
bir dizinin içindeki değerleri alfabetik veya küçükten büyüğe doğru sıralamak için sort() fonksiyonunu kullanırız. örnek:

kod:
$birinci_dizi = array ( "özbay" , "muharrem" , "hasan" , "şahika", "altun" , "taç" , "civelek" , "tabak");
sort ($birinci_dizi);php, dizideki bütün değerleri a'dan z'ye sıraya sokacaktır. sort() fonksiyonu dizinin içeğini değiştirir. bir diziyi z'den a'ya veya büyükten küçüğe doğru sıralamak için de rsort() fonksiyonunu kullanabilirsiniz. (php4.0 türkçe karakterleri tanımıyor.) bir noktada dikkatli olmak gerekir: bu fonksiyonu ilişkili (değerlerin anahtarı olarak endeks adı bulunan) dizide kullanırsanız, php, anahtar değerlerini (endeks adlarını) atar, yerine 0'dan itibaren rakam koyar. bunu önlemek için, ilişkili dizileri asort() veya ksort() fonksiyonu ile sıralamak gerekir.

ilişkili dizileri sıralama: asort() ve ksort()
ilişkili dizilerin diğer dizi değişkenlere göre farkı, değerlerinin bir de adı bulunmasıdır. değerlerin adlarına anahtar denir. bir ilişkili diziyi değerlerine göre sıralamak için asort() fonksiyonu kullanılır. örnek:

kod:
$birinci_dizi = array ( ogr_01=>"özbay", ogr_02=>"muharrem" , ogr_013>"hasan" , ogr_04=>"şahika");
asort ($birinci_dizi);php, bu diziyi değerler itibariyle alfabetik sıraya sokacaktır. eğer sıranın değere göre değil de değerlerin anahtarına (burada ogr_01, ogr_02 olan kelimeler) göre yapılmasını istiyorsak, ksort() fonksiyonunu kullanırız. örnek:

kod:
$birinci_dizi = array ( ogr_01=>"özbay", ogr_02=>"muharrem" , ogr_013>"hasan" , ogr_04=>"şahika");
ksort ($birinci_dizi);

php, şimdi bu diziyi anahtarlara göre alfabetik sıraya sokacaktır.

kaynak: ordan burdan

projelerimizde sıkça ihtiyaç duyabileceğimiz konulardan biri olan veritabanındaki veriler ile dinamik açılan kutular oluşturma için güzel bir örnek.

aşağıdaki örnekte, veritabanındaki şehirlerin açılan kutu içerisinde nasıl kullanılabileceğinizi göreceğiz.

<?
$sehirler_sorgu=mysql_query("select sehir_id,sehir_adi from sehirler");
?>
<select name="sehirler">
<?
while($sehirler_sonuc=mysql_fetch_object())
{
?>
<option value="<?=$sehirler_sonuc->sehir_id?>"><?=$sehirler_sonuc->sehir_adi?></option>
<?
}
?>
</select>

kaynak: ordan burdan

her programlama dilinde olduğu gibi php'de de değişkenler çok önemlidir. daha önce programlama tecrübesi olanlar için değişken (variable) çok yakın bir ifadeyken yeni programlamaya başlayan biri için en temel soru işaretidir. değişkenleri iyi kavramadan diğer konulara geçmek imkansızdır. çünkü her adımda değişkenlerle mutlaka karşılaşacağız. değişkenler kod içerisinde değiştirmeyi düşündüğümüz veya çeşitli verileri içinde sakladığımız isim parçalarıdır.
normal hayattan örnek vermek gerekirse, okula gittiğimiz zaman sürekli olarak "ders" 'e gireriz, işte bu değişkendir. hangi derse girdiğimiz ise bu değişkenin değeridir. örneğin 1. ders matematik, 2. ders türkçe şeklinde değişkenimiz sürekli olarak değişebilir. 1. ders de iken dersimiz ne diye sorduğumuzda herkes matematik cevabını verirken, 2. ders'e girdiğimizde aynı soruya cevabımız türkçe olacaktır..
şimdide programlama kısmına geçelim. php'de değişkenler $ ile belirtilmektedir. eğer php'de bir yazının başında $ işareti varsa o değişkendir. değişkenleri tanımlarken dikkat etmemiz gereken bazı noktalar vardır.

* değişken numara ile başlayamaz $1numara yanlıştır
* karakter kullanılamaz (+,-,& gibi) $numara-1 yanlıştır
* türkçe karakter kullanılamaz $türkçe yanlıştır
* php standart değişkenleri kullanılamaz $http_post_vars yanlıştır bu standart değişkenlere ilerde değineceğim.
* büyük-küçük harf duyarlıdır $degisken ve $degisken farklı iki değişkendir
* değişken isimlerini mümkün olduğunca açık ve net yazmak gerekir $dersinadi gibi
* belirli bir standardı takip etmemiz kodlama açısından faydalı olacaktır, kelimenin 1. harfini büyük yazmak veya kelimelerin arasını _ ile ayırmak gibi $dersinadi veya $dersin_adi şeklinde

bu konuları örnekten önce anlattım ama bunlara mutlaka bilmemiz gereken hususlardır. şimdi ilk ve en basit örneğimizi yapalım

<?
$mesaj = "merhaba dünya";
echo($mesaj);
?>
bunun çıktısı aşağıdaki şekilde olacaktır.

merhaba dünya

gördüğünüz gibi değişkenimize bir değer atadık ve ekrana bastık. gerçek dünyadaki örneğimize uygun bir örnek yapalım.

<?
$dersin_adi = "matematik";
echo("1. dersin adı : ");
echo($dersin_adi);
echo("<br>");
$dersin_adi = "türkçe";
echo("2. dersin adı : ");
echo($dersin_adi);
?>
bunun çıktısı aşağıdaki şekilde olacaktır.

1. dersin adı : matematik
2. dersin adı : türkçe
değişkenimize bir değer atamak istediğimiz zaman = işaretini kullanmamız yeterli olacaktır. php'de yazıları birbiriyle birleştirmek için . (nokta) kullanabiliriz. yukarıdaki örneğimiz . (nokta) kullanarak yazdığımız zaman daha kısa ve anlaşılır olacaktır.

<?
$dersin_adi = "matematik";
echo("1. dersin adı : ".$dersin_adi."<br>");
$dersin_adi = "türkçe";
echo("2. dersin adı : ".dersin_adi);
?>
bu kodun çıktısı da yukarıdaki ile aynı olacaktır. . (nokta) ile yazılarımızı ve değişkenlerimizi birleştirmiş olduk. bunu birçok yerde kullanabiliriz. mesela isim ve soyadı ayrı ayrı alıp ekrana tek bir parça halinde yazabiliriz.

<?
$isim = "hasan";
$soyad = "yaşar";
echo($isim." ".$soyad);
?>
bu kod ekrana hasan yaşar yazacaktır. aynı işlemi iki değişkenimizi bir değişkende birleştirerek de yapabilirdik.

<?
$isim = "hasan";
$soyad = "yaşar";
$isim_soyad = $isim." ".$soyad;
echo($isim_soyad);
?>

bu kodumuz da ekrana aynı sonucu yazacaktır. php'de değişkenler konusunda oldukça esnektir. hem yazıyı, hem sayıyı değişken olarak atayabiliriz.

<?
$isim = "hasan";
$soyad = "yaşar";
$yas = 27;
echo($isim." ".$soyad." ".$yas." yaşındadır");
?>
buradaki kodumuz ekrana hasan yaşar 27 yaşındadır yazacaktır. esneklik olarak değişkenimizi . (nokta) ile birleştirmek yerine direk olarak parantez içerisinde de yazabilmekteyiz. yukarıdaki tanımlamalarımızın devam ettiğini düşünerek alttaki örneği yazabiliriz.

<?
echo("$isim $soyad $yas yaşındadır");
?>
bu kodun ekran çıktısı da aynı olacaktır. bir önceki konuda ' (tek tırnak) ile " (çift tırnak) arasında bazı farklardan bahsetmiştim, burada ' (tek tırnak) kullandığımız takdirde ekrana $isim $soyad $yas yaşındadır şeklinde bir çıktı gelecektir, haliyle değişkenlerimizin değerleri ekrana basılmamış olacaktır.
değişken tanımlamalarını yaparken değişken tanımlarken bir değişken ismini de kullanabiliriz..

<?
$olay = "ders";
$$olay = "matematik";
echo($ders);
?>
bu kod ekrana matematik yazdıracaktır. $olay değişkeninde ders tanımlı olduğu için tekrar $ koyduğumuz zaman $ders diye bir değişken olacaktır ve atamamız ona yapılacaktır.
değişkenleri ilk başlarda en çok formlarımızda kullanacağız. bu nedenle formlardan nasıl veri alacağımızı da öğrenmemiz gerekiyor. form'dan veri gönderme metodumuz post ise $_post["deger"] şeklinde alabiliriz, get metodu ile gönderildiyse $_get["deger"] seklinde veriyi alabiliriz.
öncelikle bir html dosyası oluşturup içerisine de formumuzu hazırlayalım, ismini form.html olarak kaydedebiliriz.

<form action="form.php" method="get">
isminizi giriniz : <input type="text" name="isim"><br>
soyadınızı giriniz : <input type="text" name="soyad"><br> <input type="submit" value="gönder"> </form>

daha sonra bir php dosyası ile bunu okuyup ekrana basalım. dosyamızın adı action'da belirttiğimiz isim olmalıdır, çünkü verilerimiz orada yazan dosyaya gönderilmektedir.
form.php

<?
echo("isminiz : ".$_get["isim"]."<br>");
echo("soyadınız : $_get["soyad]."<br>");
?>
ekran çıktısı :
isminiz : girdiğiniz isim
soyadınız : girdiğiniz soyad
şeklinde olacaktır. metod olarak post kullanmış olsaydık, dosyamız aşağıdaki şekilde olacaktı.
form.php

<?
echo("isminiz : ".$_post["isim"]."<br>");
echo("soyadınız : $_post["soyad]."<br>");
?>
birde yukarıda bahsettiğim php'nin kendi kullandığı standart fonksiyonlar vardır. bunlara genel tanımlı değişkenler (environment variables) denilmektedir.
genel tanımlı değişkenler (environment variables) :
$_get veya $http_get_vars form'dan get metodu ile gönderilen veriyi alır
$_post veya $http_post_vars form'dan post metodu ile gönderilen veriyi alır
$http_user_agent ziyaretçinin tarayıcı (browser) bilgisini verir
$remote_addr ziyaretçinin ıp adresini verir
$request_urı çalışmakta olan php dosyasının adını varsa get metodu ile gönderilmiş değerleri verir
$scrıpt_fılename çalışmakta olduğumuz php dosyasının ismini verir
$scrıpt_urı çalışmak olduğumuz dosyanın tam adresini verir
$server_addr sunucunun ıp adresini verir
$php_self çalışmakta olduğumuz dosyayı ve dizini verir..
başka genel tanımlı değişkenlerde vardır bunları da kolayca internette bulabilirsiniz, fakat ilk başta bunlar yeterli olacaklardır.. bunları normal değişkenler gibi kullanabiliriz.

<?
echo("hoşgeldiniz.. ıp adresiniz : $remote_addr);
?>
bu ekrana hoşgeldiniz.. ıp adresiniz: 1.2.3.4 şeklinde bir sonuç basacaktır.
sabitler
değişkenler dışında sabitlerde tanımlayabiliriz, bunlar kodumuz içerisinden değiştiremediğimiz ve değiştirmeyeceğimiz değerlerdir.. define() fonksiyonu ile tanımlanmaktadır. klasik örnek olarak pı sayısı verilmektedir, bende klasiği bozmayıp o örneği veriyorum.

<?
define("pı","3.14");
echo(pı);
?>
ekrana 3.14 basılacaktır ve istediğimiz yerde pı değerini kullanabiliriz, birçok php yazılımında dil dosyaları bu tarz sabitlerle tanımlanmaktadır.
kısaca değişkenler bu kadar, global değişkenleri ileriki konularda anlatacağım. matematiksel işlemleri anlattıktan sonra değişkenlerle ilgili fonksiyonları da anlatacağım..
bu fonksiyonları önceden gözatmak isterseniz..

settype()
gettype()
isset()
unset()
empty()
is_string()
is_integer()
is_double()
intval()
doubleval()
doubleval()

kaynak: ordan burdan