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:
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:
print (”Dosyanın boyutu:”);
print filesize( “bir_dosya.txt” );
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:
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() 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:
<?php
$dosya_dizin = “/inetpub/wwwroot/”;
touch (”$dosya_dizin/yeni_belge.txt”);
print (”yeni_belge adlı bir dosya oluşturuldu!”);
?>
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:
<?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:
<?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:
$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:
$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:
$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:
<?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 Internet’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:
<?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:
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:
<?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 Internet’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:
<?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:
<?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:
<?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:
$dosya = fopen( “bir_dosya.txt” , ‘w’ ) or die (”Dosya açılamıyor!”) ;
ek amacıyla açmak için ise
$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:
<?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!\n”;
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , “Bu satır ise sonradan eklenecek\n” ) ;
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:
<?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!\n”;
fwrite ( $dosya , $metin ) ;
fputs ( $dosya , “Bu satır ise sonradan eklenecek\n” ) ;
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 İş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.
Dizin içeriğini listeleme: opendir() ve readdir()
Belirttiğiniz bir dizindeki tüm dosya ve alt-dizin adlarını bir liste, hatta ilişkilendirilmiş hypertext (köprü, link) listesi olarak sunabilmek için önce dizini içeriğini okuyabilmek için opendir() fonksiyonu ile açmak, sonra da içindeki bilgileri readdir() fonksiyonu ile edinmek gerekir. readdir() fonksiyonu dizinin içindeki alt-dizin ve dosyaların adlarını sırayla, tek-tek okur. Bu fonksiyondan gelen bilgileri bir değişkene atayarak ve bir döngü içinde yazdırarak, dizin listesi çıkartabiliriz. Örnek
<?php
$dizin_adi = “./”;
$dizin = opendir ($dizin_adi);
while ( gettype ( $bilgi = readdir( $dizin ) ) != boolean ) {
if ( is_dir( “$dizin_adi/$bilgi” ) )
print ” [Dizin] ” ;
print (”<A href=\”$dizin_adi/$bilgi\”>$bilgi</A><br>\n”);
}
closedir ($dizin);
?>
Kişisel Web sunucuda sınama amacıyla çalıştırabilmek için dizin adı olarak bu dosyanın içinde bulunduğu dizini verebiliriz. opendir() fonksiyonu da okunmak amacıyla açacağı dizine işaret eden bilgiyi bir değişkene yazmak zorundadır; bu işaret değişkenine burada $dizin adını veriyoruz. $dizin değişkeninin işaret ettiği dizini okuyan readdir() fonksiyonundan dönen bilgileri ise $bilgi değişkenine yazıyoruz. readdir() fonksiyonu dizin bilgisini okumanının sonuna vardığında, bir dosya ve dizin adı yerine doğru veya yanlış şeklinde bir mantıksal (boolean) değer verecektir; buradaki while döngüsü $bilgi değişkeninin türünü gettype() fonksiyonu ile sürekli sınayarak, henüz dizin ve dosya adı edinildiği sırada bu bilgileri print() fonksiyonuna verecektir. Bu bilginin bir dizine ait olup olmadığını is_dir() fonksiyonu ile sınayan if döngüsü ise bilgi bir dizine aitse, bu bilgnin baştarafına “[Dizin]” kelimesini yazdıracaktır.
Dizin oluşturma: mkdir()
PHP programlarımız gerektiğinde sunucunun yazma yetkisi verdiği Web’e açık kök ve alt-dizinlerde yeni dizinler oluşturabilir. Bunu, mkdir() fonksiyonu ile yaparız. Bu fonksiyona oluşturulacak dizinin adı ve 8 tabanlı (octal) sayı cinsinden ve önüne bir sıfır konarak dizinin okuma/yazma/çalıştırma izinlerini belirten parametre verilir. Örnek:
mkdir (”deneme”, 0777);
Burada yer alan 0777, bu dizinin herkes için okuma ve yazma izni olduğunu gösterir. Bu parametre sadece Unix işletim sisteminde çalışan sunucular için geçerlidir.
Dizin silme: rmdir()
PHP programlarımızda gerektiğinde sunucunun yazma yetkisi verdiği Web’e açık kök ve alt-dizinlerde mevcut dizinleri silebiliriz. Bunu, rmdir() fonksiyonu ile yaparız. Bu fonksiyona oluşturulacak dizinin adı parametre verilir. Örnek:
rmdir (”deneme”);
MySQL Veritabanı
mySQL veri türleri
MySQL’de bir çok veri türü oluşturulabilir. Ancak Web programları açısından önemli olan bir kaçı ve özellikleri şöyle saralanabilir:
INT Tamsayı: -2147483648′den 2147483647 kadar değişen diziye “signed“ (işaretli), 0′dan 4294967295′e kadar değişenine “unsigned” (işaretsiz) denir.
VARCHAR

n sayısını geçmemek şartıyla değişen boyutta karakter olabilir.
CHAR

Kesinlikle n sayısı kadar karakter olabilir.
TEXT En fazla 65535(2^16-1) karakter alabilen metin alanı.
MEDIUMTEXT En fazla 16777215(2^24-1) karakter alabilen metin alanı.
DATE 1000-01-01′den 9999-12-31′e kadar değişebilen tarih alanı.
TIMESTAMP 1 Ocak 1970′den 18 Ocak 2038′e kadar olan ve Yıl+Ay+Gün+Saat+Dakika+Saniye biçimindeki zaman bilgisi.
MySQL’de bir tablo oluşturmak için gerekli CREATE TABLE komutu şöyle kullanılır:
CREATE TABLE uyeler (adi VARCHAR(30), soyadi VARCHAR(30), üye_no INT ) ;