nedir

<head>..</head> arasına eklenecek kod

<!- original: scriptbreaker ->
<!- web : http://www.scriptbreaker.com ->
<style>
.move
{
width:100%;
background-color:#3e5999;
border-bottom:1px solid black;
font-size:14px;
font-family:verdana;
font-color:”#c9d2dc”;
text-align:center;
}
.info
{
width:100%;
background-color:#3e5999;
border-top:1px solid black;
font-size:13px;
font-family:verdana;
font-color:”#ffffff”;
color:”ffffff”;
}
.panel
{
width:150;
position:absolute;
border:1px solid black;
left:350;
top:200;
font-size:13px;
font-family:verdana;
}
.panel a:visited{color:blue;}
.panel a{text-decoration:none;color:blue}
.panel a:hover{text-decoration:none;}
#panel a.visited{
text-decoration:none;
}
.menu
{
width:100%;
background-color:#96c5aa;
font-size:13px;
font-family:verdana;
}
.bilgi {font-family:arial black, arial;font-size:17px; color:gold; font-weight:bold;}
</style>

<scrıpt language=””>
n = (document.all) ? 0 : 1;
var ob;
var over = false;

function md(e) {
if (over)
{
if (n) {
ob = document.getelementbyıd(”panel”);
x=e.layerx;
y=e.layery;
return false;
}
else {
ob = document.getelementbyıd(”panel”);
ob = ob.style;
x=event.offsetx;
y=event.offsety;
}
}
}

function mm(e) {
if (ob) {
if (n) {
ob.style.top = e.pagey-y;
ob.style.left = e.pagex-x;
}
else {
ob.pixelleft = event.clientx-x + document.body.scrollleft;
ob.pixeltop = event.clienty-y + document.body.scrolltop;
return false;
}
}
}

function mu() {
ob = null;
}
if (n) {
document.captureevents(event.mousedown | event.mousemove | event.mouseup);
}
document.onmousedown = md;
document.onmousemove = mm;
document.onmouseup = mu;
</script>

<body>..</body> arasına eklenecek kod

<div id=”panel” class=”panel” >

<script language=””>

function getarray(id)

{

var splitarray = link[id].split(”|”);

return splitarray;

}

function info(i,obj,col)

{

sublink = getarray(i);

infobar = document.getelementbyıd(”infob”);

infobar.innerhtml = “<font class=’bilgi’><i>!</i></font> “+sublink[2];

obj.style.backgroundcolor=col;

}

function endi(obj,col)

{

obj.style.backgroundcolor=col;

infobar = document.getelementbyıd(”infob”);

infobar.innerhtml = “<font class=’bilgi’><i>!</i></font> açıklamasını görmek için bir öğe seçin.<br>”;

}

var link = new array();

link[0] = ” â» extradestek.org|http://www.extradestek.org |destek sitesi”;

link[1] = ” â» hediyeler.org|http://www.hediyeler.org|hediyelerini kendin yap”;

link[2] = ” â» temaları|http://www.themes-.org |çe tema arşivi”;

link[3] = ” â» epardus.com|http://www.epardus.com |özgür yazılım destek sitesi”;

link[4] = ” â» derinayna.com|http://www.derinayna.com|küresel ısınma”;

document.write(”<div class=’move’ onmouseover=’over=true;’ onmouseout=’over=false;’ style=’cursor:move’><font color=#c9d2dc><b>:: m e n ü ::</b></font></div><div class=’menu’><br></div>”);

for(i=0;i<link.length;i++)

{

sublink = getarray(i);

document.write(”<a href=’”+sublink[1]+”‘><div class=’menu’ onmouseover=”info(”+i+”,this,’gold’)” onmouseout=”endi(this,’#96c5aa’)” style=’cursor:hand’> “+ sublink[0] +”</div></a>”);

}

document.write(”<div class=’menu’><br></div><div class=’info’ id=’infob’ name=’infob’><font class=’bilgi’><i>!</i></font> <br></div>”);

</script>

</div>
<!- end source ->

kaynak: ordan burdan

<script>
function confirmdelete(delurl) {
if (confirm(”silmek istediğinize emin misiniz?”)) {
document.location = delurl;
}
}
</script>

<a href=”:confirmdelete(’delete.page?id=1′)”>sil</a>

başka bir yol

<a href=”delete.page?id=1″ onclick=”return confirm(’silmek istediğinize emin misiniz?’)”>sil</a>

kaynak: ordan burdan

bir çok yerde sanirsan herkes bundan yakiniyor bende group kullanimi max kullanimi hakkinda detayli bir aciklama yapmak istedim. aslinda konu sql konusu ama bilinçsin bazı kesim surekli 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 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 şı 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 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. 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 kullanılacağı veritabanın 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 ını ınıza indirip herhangi bir sıkıştırma aracı ile ı açın.

3. yeni web sunucunuza örneğin "dumb" isimli bir dizin oluşturun 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 mlı değerine geri çevirmeyi unutmayınız.)

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

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

6. şimdi bigdump. 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.

7. İşlemi başlatmak için uygun seçeneği seçip süreci başlatın, 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ı bigdump. 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 ı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 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; programlarımıza sunucuda bir dosyada bulunan bilgileri okumasını da öğreteceğiz.

harici dosya (include)
programlarımızda bilmemiz gereken ilk dosya işlemi, bir ına, kendi dışındaki dosyayı, tabir yerinde ise, okutmak 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 ına sık kullandığınız bir metni veya parçasını dahil edebilirsiniz. bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucu browser'ların 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 düzyazı biçiminde kaydedin ( 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 ı alıp buraya getirdi! kendisine teşekkür ederim"
sonra, şu ı dosya_ekle01. adıyla kaydedin, browser'da açın:

kod:
<>
<head>
<tıtle>'de harici dosya </tıtle>
<meta http-equiv="content-type" content="text/; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/; charset=-1254">
</head>
<?
include ("harici_dosya01.x");
print ("
<p> ben zaten bu ı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>
</>
buradaki include komutu biraz önce yazdığımız harici dosyayı alacak, içeriğini aynen kendi bulunduğu noktada, 'nin oluşturacağı dosyasına katacaktır. bu ı ç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 ına sadece düz metin eklemeyiz; veya fonksiyon da ekleyebiliriz. harici dosyada şu değişikliği yaparak, harici_dosya02.x adıyla kaydedin.

kod:
<?
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 ı da ı içinde, okunacak dosya adını düzelttikten sonra dosya_ekle02. adıyla kaydedin; ç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ı, 'nin dışarıdan aldığı dosyanın içinde ı olduğunu gördüğü anda, bu dosyanın içeriğini metin olarak değil, olarak ele almasıdır. bu yolla, programlarımıza bir değerin dönmesini de sağlayabiliriz. haricã® dosyamızda şu değişikliği yapalım harici_dosya03.x adıyla kaydedelim:

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

kod:
<?
$donen_sonuc = include("harici_dosya03.x");
print ("
<p> harici dosyadan dönen sonuç: $donen_sonuc </p>");
?>
haricã® dosyamızın içindeki , return komutu ile sadece kendi içinde elde ettiği sonucu, onu çağıran programa verdi; bu sonucu alan ı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 programlarımıza katılması, özellikle bir sitenin bir çok ında sık sık kullanılan metinlerin hesaplamaların bir kere yazılmasını tek satırla çağrılmasını sağladığı için kolaylık sağlar 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 ımıza dahil edebiliriz.
include ile alacağımız dosyaların adını ı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 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 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 dosya03.x olmalı halinde, bu döngü sırasıyla her üç dosyayı da çağıracak altalta ana programa dahil edecektir.

dosyalar hakkında bilgi
'de yukarıda ele aldığımız include require komutları biraz sonra değineceğimiz dosya okutma 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ı, ımızın sağlıklı işleyebilmesi açısından büyük önem taşır. bu amaçla bize bir kaç kullanıma hazır fonksiyon sağlıyor. burada kısaca bu fonksiyonlara 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, "dosya var!" yazmadan yoluna devam edecektir.

dosya mı, dizin mi? is_file() 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 "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 "bu bir dizindir!" yazmadan yoluna devam edecektir.

dosya okunabilir mi? is_readable()
programda kullanmaya vermeden önce bir dosyanın erişilebilir 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 "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 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 "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()
ında kimi zaman sunucunun kullanmamıza izin verdiği haricã® programları çalıştırız; ımızın düzgün işlemesi bu harici programa bağlı olabilir. böyle bir ı çalıştırmaya 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 değilse ı "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() 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, , 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 browser penceresine 28 jul 2000 242:00:00 00 yazdıracaktır. 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 'nin date() fonksiyonu kullanılır.

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

kod:
<?
$dosya_dizin = "/inetpub/wwwroot/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
</body>
</>
bu ı 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 ı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?
$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, dosyanın içeriğine dokunmayacak, fakat dosyanın erişim değişim tarihlerini değiştirecektir.
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:
<?
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
unlink ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı dosya silindi!");
?>
bu komut sistemlerinde işlemeyebilir.

dosya
'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 yla açılması halinde bir tamsayı verecektir. 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' );
, bu dosyayı sadece okumak amacıyla açacak fonksiyondan dönen değeri $dosya değişkenine atayacaktır. olmayan bir dosyayı açmak istediğimiz zaman 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 ö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 mesajı verir.

bir fonksiyonu durdurmak için: öl!
bir 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:
<?
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
, 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 web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?
$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() fgetc()
açtığımız bir dosyanın içindeki yazıları çoğu zaman ımıza satır satır okuturuz. '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ı 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 vermemesi için, 'nin dosyanın sonuna ulaştığında döngüyü durdurmamız gerekir. fgets() fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilir daha sonra bu değeri programlarımızda kullanabiliriz. örnek:

kod:
<?
$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 kişisel web sunucuda önce varolan bir dosyayı açıyor; 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 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; 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 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. , 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() 'nin bir ı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:
<?
$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ı 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 mesela 1, 2, 3 yaparak deneyebilir böylece vereceğiniz ölçünün okunan metnin uzunluğunu tayin ettiğini görebilirsiniz.
fseek() ile ölçü belirleme
'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ı ı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:
<?
$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 , 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:
<?
$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 daha sonra print() fonksiyonu ba karakteri 'in satır bölme kodu olan <br> işaretini browser penceresine gönderiyor. ı bu şekliyle sınarsanız, dosyadaki metnin tek karakter olarak browser penceresinin soluna dizildiğini göreceksiniz. ı <br> kodunu silerek çalıştırırsanız, bu kez dosyadaki metinde var olan satır sonu işaretlerinin de kaldırıldığını metnin bir paragraf oülarak görüntülendiğıini görebilirsiniz.

dosyaya yazma ek yapma: fwrite() fputs()
bir dosyaya yazma veya ek yapma, 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 işlemlerinin farkı, 'w' parametresi ile açılan dosyaya yazma işlemi en başından başlar devam eder; 'a' parametresi ile açaılan dosyaya yazma işlemi ise en sondan başlar devam eder.
'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() fputs() aynı biçimde yazılır aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. örnek:

kod:
<?
$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 ı çalıştırdığınızda, bir_dosya.txt adlı dosyada mevcut bütün içerik silenecek 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 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 dosyalarla işlem yapan programları çalıştırıyor olabilir. bu, '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ı kilit türünü belirten endeks sayısını parametre olarak yazarız. örnek:

kod:
<?
$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 ı tarafından kilitlendiği anda, aynı dsyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı gösterirler.

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

kaynak: ordan burdan

web ı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 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; programlarımıza sunucuda bir dosyada bulunan bilgileri okumasını da öğreteceğiz.

harici dosya (include)
programlarımızda bilmemiz gereken ilk dosya işlemi, bir ına, kendi dışındaki dosyayı, tabir yerinde ise, okutmak 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 ına sık kullandığınız bir metni veya parçasını dahil edebilirsiniz. bir güvenlik önlemi olarak bu tür dosyaların uzantılarını, sunucu browser'ların 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 düzyazı biçiminde kaydedin ( 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 ı alıp buraya getirdi! kendisine teşekkür ederim"
sonra, şu ı dosya_ekle01. adıyla kaydedin, browser'da açın:

kod:
<>
<head>
<tıtle>'de harici dosya </tıtle>
<meta http-equiv="content-type" content="text/; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/; charset=-1254">
</head>
<?
include ("harici_dosya01.x");
print ("
<p> ben zaten bu ı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>
</>
buradaki include komutu biraz önce yazdığımız harici dosyayı alacak, içeriğini aynen kendi bulunduğu noktada, 'nin oluşturacağı dosyasına katacaktır. bu ı ç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 ına sadece düz metin eklemeyiz; veya fonksiyon da ekleyebiliriz. harici dosyada şu değişikliği yaparak, harici_dosya02.x adıyla kaydedin.

kod:
<?
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 ı da ı içinde, okunacak dosya adını düzelttikten sonra dosya_ekle02. adıyla kaydedin; ç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ı, 'nin dışarıdan aldığı dosyanın içinde ı olduğunu gördüğü anda, bu dosyanın içeriğini metin olarak değil, olarak ele almasıdır. bu yolla, programlarımıza bir değerin dönmesini de sağlayabiliriz. haricã® dosyamızda şu değişikliği yapalım harici_dosya03.x adıyla kaydedelim:

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

kod:
<?
$donen_sonuc = include("harici_dosya03.x");
print ("
<p> harici dosyadan dönen sonuç: $donen_sonuc </p>");
?>
haricã® dosyamızın içindeki , return komutu ile sadece kendi içinde elde ettiği sonucu, onu çağıran programa verdi; bu sonucu alan ı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 programlarımıza katılması, özellikle bir sitenin bir çok ında sık sık kullanılan metinlerin hesaplamaların bir kere yazılmasını tek satırla çağrılmasını sağladığı için kolaylık sağlar 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 ımıza dahil edebiliriz.
include ile alacağımız dosyaların adını ı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 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 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 dosya03.x olmalı halinde, bu döngü sırasıyla her üç dosyayı da çağıracak altalta ana programa dahil edecektir.

dosyalar hakkında bilgi
'de yukarıda ele aldığımız include require komutları biraz sonra değineceğimiz dosya okutma 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ı, ımızın sağlıklı işleyebilmesi açısından büyük önem taşır. bu amaçla bize bir kaç kullanıma hazır fonksiyon sağlıyor. burada kısaca bu fonksiyonlara 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, "dosya var!" yazmadan yoluna devam edecektir.

dosya mı, dizin mi? is_file() 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 "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 "bu bir dizindir!" yazmadan yoluna devam edecektir.

dosya okunabilir mi? is_readable()
programda kullanmaya vermeden önce bir dosyanın erişilebilir 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 "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 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 "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()
ında kimi zaman sunucunun kullanmamıza izin verdiği haricã® programları çalıştırız; ımızın düzgün işlemesi bu harici programa bağlı olabilir. böyle bir ı çalıştırmaya 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 değilse ı "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() 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, , 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 browser penceresine 28 jul 2000 242:00:00 00 yazdıracaktır. 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 'nin date() fonksiyonu kullanılır.

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

kod:
<?
$dosya_dizin = "/inetpub/wwwroot/";
touch ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı bir dosya oluşturuldu!");
?>
</body>
</>
bu ı 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 ı gerçek sunucuda çalıştırabilmek için yazma/okuma izni bulunan web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?
$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, dosyanın içeriğine dokunmayacak, fakat dosyanın erişim değişim tarihlerini değiştirecektir.
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:
<?
$dosya_dizin = "/wwwroot/mycgiserver.com/members/unhm13qnm/";
unlink ("$dosya_dizin/yeni_belge.txt");
print ("yeni_belge adlı dosya silindi!");
?>
bu komut sistemlerinde işlemeyebilir.

dosya
'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 yla açılması halinde bir tamsayı verecektir. 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' );
, bu dosyayı sadece okumak amacıyla açacak fonksiyondan dönen değeri $dosya değişkenine atayacaktır. olmayan bir dosyayı açmak istediğimiz zaman 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 ö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 mesajı verir.

bir fonksiyonu durdurmak için: öl!
bir 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:
<?
$dosya_dizin = "/inetpub/wwwroot/";
if ($dosya = (fopen ("$dosya_dizin/bir_dosya.txt" , 'r') ) ) {
print ("dosya açıldı!");
}
else {
print ("dosya açılamadı!");
}
?>
, 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 web sunucunun erişebileceği bir dizinin adını vermeniz gerekir. örneğin:

kod:
<?
$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() fgetc()
açtığımız bir dosyanın içindeki yazıları çoğu zaman ımıza satır satır okuturuz. '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ı 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 vermemesi için, 'nin dosyanın sonuna ulaştığında döngüyü durdurmamız gerekir. fgets() fonksiyonunun okuyacağı satırı bir fonksiyona değer olarak verebilir daha sonra bu değeri programlarımızda kullanabiliriz. örnek:

kod:
<?
$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 kişisel web sunucuda önce varolan bir dosyayı açıyor; 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 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; 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 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. , 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() 'nin bir ı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:
<?
$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ı 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 mesela 1, 2, 3 yaparak deneyebilir böylece vereceğiniz ölçünün okunan metnin uzunluğunu tayin ettiğini görebilirsiniz.
fseek() ile ölçü belirleme
'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ı ı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:
<?
$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 , 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:
<?
$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 daha sonra print() fonksiyonu ba karakteri 'in satır bölme kodu olan <br> işaretini browser penceresine gönderiyor. ı bu şekliyle sınarsanız, dosyadaki metnin tek karakter olarak browser penceresinin soluna dizildiğini göreceksiniz. ı <br> kodunu silerek çalıştırırsanız, bu kez dosyadaki metinde var olan satır sonu işaretlerinin de kaldırıldığını metnin bir paragraf oülarak görüntülendiğıini görebilirsiniz.

dosyaya yazma ek yapma: fwrite() fputs()
bir dosyaya yazma veya ek yapma, 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 işlemlerinin farkı, 'w' parametresi ile açılan dosyaya yazma işlemi en başından başlar devam eder; 'a' parametresi ile açaılan dosyaya yazma işlemi ise en sondan başlar devam eder.
'nin bir dosyaya metin yazdırma fonksiyonları olan fwrite() fputs() aynı biçimde yazılır aynı işlevi yerine getirirler; aralarında kesinlikle fark yoktur. örnek:

kod:
<?
$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 ı çalıştırdığınızda, bir_dosya.txt adlı dosyada mevcut bütün içerik silenecek 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 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 dosyalarla işlem yapan programları çalıştırıyor olabilir. bu, '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ı kilit türünü belirten endeks sayısını parametre olarak yazarız. örnek:

kod:
<?
$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 ı tarafından kilitlendiği anda, aynı dsyayı daha sonra kilitlemeye kalkan diğer programlar kendilerinden önce konulmuş kilide saygı gösterirler.

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

kaynak: ordan burdan

ile kodlanmış basit bir arama ı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:

<>
<body>

<?

if (empty ($ara) ): ?>

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

<?

else:

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

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

if (stristr ($file, ".") || 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>
</>

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 " 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, 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 arzu ettiğimiz zaman notları doldurabilmeliyiz. öğrenciler de yapacağımız web sitesine girerek, kendi notlarını görebilmeli notlarını inceleyebilmeli. 'nin bu amaçla sağladığı araç, çok-boyutlu dizi-değişken oluşturma aracıdır. bu la yukarıdaki listeyi aynen şöyle yapabiliriz. bu kodu dizi_degiskenler01. adıyla kaydedin:

kod:
<>
<head>
<tıtle>'de degiskenler</tıtle>
<meta http-equiv="content-type" content="text/; charset=ıso-8859-9">
<meta http-equiv="content-type" content="text/; charset=-1254">
</head>
<body>
<b>
<h2>
<?
$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>
</>programdaki "print()" komutunu sadece dizi değişkeni doğru yazıp yazmadığımızı sınamak amacıyla yazdık; bu ı 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 herbir elemanın değerlerinin sonunda vrigül olduğuna dikkat edir. bir diğer önemli nokta: endeks adları bir kelimeden fazla ise bunları içine alarak belirtmektir. örneğin:

kod:
array ( adi => "özbay", soyadi => "altun", " 1 notları" =>"", " 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 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.