Hakkında Künye

PHP ile Sunucu Tarafı Web Programlama - Üçüncü Bölüm

Bu ayki yazımızda dosyalardan, dosya yüklemeden, e-mail gönderilmesinden, oturum yönetiminden, çerezlerden (cookies) bahsedeceğimizi söylemiştik. Hiç vakit kaybetmeden "dosyalar" diyerek başlamak istiyorum.

Dosyalar

PHP ile birçok şeyi yaptığımız gibi, elimizde bulunan dosyaları değiştirmemiz, silmemiz, ya da yeni dosyalar yaratmamız mümkün. Php de dosyalar ile ilgili işlemler yapacağımız zaman bilmemiz gereken belli başlı fonksiyonlar bulunmaktadır. Bunlardan birincisi,

fopen() : fopen fonksiyonu Php ile elimizdeki dosyaları açmamızı sağlar.

<?
$dosya=fopen("deneme.txt", "r");
?>

şeklinde bir sözdizimi bulunmaktadır. Fonksiyonun aldığı ilk parametre açılacak olan dosyanın adresini, ikinci parametre ise açılacak olan dosya üzerinde yapılacak olan işlemlere olan izinleri belirtmektedir.

  • r : Dosyaya okuma izni verilmesini sağlar. Dosyanın ilk satırından itibaren değerlendirmeye alır.
  • r+ : Okuma ve yazma izinlerinin verilmesini sağlar. Dosyanın ilk satırından itibaren değerlendirmeye alır.
  • w : Dosyaya yazma izninin verilmesini sağlar. Eğer dosyanın içi boş değilse içindeki herşeyi siler. Eğer o adı yaşıyan dosya mevcut değilse, kendisi oluşturur.
  • w+ : Okuma ve yazma izinlerinin verilmesini sağlar. Eğer dosya boş değilse içindeki herşeyi siler. Eğer o adı taşıyan dosya mevcut değilse, kendisi oluşturur.
  • a : Ekleme izninin verilmesini sağlar. Dosyayı açarak sonuna ekleme yapılmasını için gerekli izinleri verir. Eğer o adı taşıyan dosya mevcut değilse kendisi oluşturur.
  • a+ : Ekleme ve okuma izinlerinin ikisinin de aynı anda verilmesini sağlar. Dosyanın içeriğini değiştirmeden dosyanın sonuna ek yapmamızı sağlar. Eğer o adı taşıyan bir dosya mevcut değilse kendisi oluşturur.
  • x : Sadece yazma izininin verilmesini sağlar ve yeni bir dosya oluşturmaya yarar. Eğer o adı taşıyan dosya bulunuyorsa FALSE döner.
  • x+ : Yazma ve okuma izinlerinin aynı anda verilmesini sağlar ve aynı şekilde yeni bir dosya oluşturur. Eğer o adı taşıyan dosya bulunuyorsa, FALSE döner.

fclose() :fopen() fonksiyonu ile açtığımız dosyayı kapatmaya yarar.

<?
$dosya=fopen("deneme.txt", "r");

//çalıştırılacak kodlar.

$fclose($dosya);
?>

şeklinde bir kullanımı vardır. Tek yapmamız gereken dosyayı açarken vermiş olduğumuz değişkenin aynısını kapatırken de göstermeye dikkat etmek.

feof() : Açtığımız dosyadaki tüm bilgileri okuyup satırın sonuna gelip gelmediğimizi kontrol eden fonksiyondur. w, a ve x izinlerini verdiğimiz bir dosyada okuma işlemini gerçekleştiremediğimiz için feof() fonksiyonu da kullanamaz duruma geliyor. Uzunluğunu bilmediğimiz dosyaları okumakta kullanılan çok faydalı bir fonksiyondur.

fgets() ve fgetc() : Bu iki fonksiyon da açmış olduğumuz dosyaların içeriklerini okumaya yarar. fgets() fonksiyonu dosyayı satır satır okurken, fgetc() fonksiyonu dosyayı karakter karakter okur. Kullanımlarına gelince;

<?
$dosya=fopen("deneme.txt","r");

while(!feof($dosya))
{
echo fgetc($dosya);
}

fclose($dosya);
?>

ve

<?
$dosya=fopen("deneme.txt","r");

while(!feof($dosya))
{
echo fgets($dosya);
}

fclose($dosya);
?>

şeklindeki bir kullanımda "deneme.txt" dosyasına okuma izni verip, sonra da dosyanın sonuna gelinceye kadar while yapısını kullanarak okuduk, ve ekrana yazdırdık. Tek farklı yönleri yukarıda da dediğimiz gibi fgets() fonksiyonu satır satır okuyor, fgetc() fonksiyonu ise karakter karakter okuyor.

file(): Bir dosyanın içeriğini dizinin içerisine aktaracağımız zaman kullandığımız fonksiyondur. Dosyanın içerisindeki verileri satır satır okuyarak her bir satırı dizinin bir elemanı olarak kaydetmemizi sağlar. Dosyanın içerisinde boş satır varsa onları da olduğu gibi boş satır olarak diziye aktarır.

Dosya yükleme

Genel olarak php ile dosyaların gönderilmesi ve yüklenmesi iki kısımda inceleyebiliriz. Bunlardan birincisi, dosyalarımızın sunucumuza geçici olarak yüklenmesidir.Öncelikle yapmamız gereken bir tane dosya yükleme formu oluşturmamız olacaktır.

<form action="dosya_yukle.php" method="post" enctype="multipart/form-data">
	<label for="file">Dosya Adı:</label>
	<input type="file" name="file" id="file" /> 
	<input type="submit" name="submit" value="Yükle" />
</form>

şeklinde dosya yükleme formunu oluşturup form.php adı altında kaydetmemiz yeterli olacaktır. Daha sonra da form tarafından gönderilen verilerin işleneceği dosya_yukle.php adındaki dosyamızı oluşturmayalıyız. Onu da,

<?
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Yüklenen dosya: " . $_FILES["file"]["name"] . "<br />";
echo "Dosyanın türü: " . $_FILES["file"]["type"] . "<br />";
echo "Dosyanın büyüklüğü: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Geçici depo adresi: " . $_FILES["file"]["tmp_name"];
}
?>

şeklinde oluştururuz. Buradaki bazı kullanımlar çok önemlidir.

  • $_FILES["file"]["error"]- Dosya yüklenmesinde eğer bir sorun ile karşılaşıldıysa karşılaşılan sorunu,
  • $_FILES["file"]["name"]- Yüklediğimiz dosyanın adını,
  • $_FILES["file"]["type"]- Yüklenilen dosyanın türünü,
  • $_FILES["file"]["size"]- Yüklediğimiz dosyanın büyüklüğünü,
  • $_FILES["file"]["tmp_name"]- Yüklediğimiz dosyanın sunucu tarafından oluşturulan geçici kopyasının adını bizlere vermektedir.

Yukarıdaki kullanımda dosyamızı sunucumuza yükleyip, sunucuda geçici olarak bir kopyasını oluşturduk. İkinci kısımda ise, geçici olarak oluşturulan bu dosyanın sunucularımızda kalıcı olarak depolanmasını sağlayacağız. Bu kısımda, kaydetmiş olduğumuz dosya_yukle.php dosyasına ek satırlar eklememiz gerekecek ve dosyamızın en son hali,

<?
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Yüklenen dosya: " . $_FILES["file"]["name"] . "<br />";
echo "Dosyanın türü: " . $_FILES["file"]["type"] . "<br />";
echo "Dosyanın büyüklüğü: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Geçici depo adresi: " . $_FILES["file"]["tmp_name"] . "<br />";

if (file_exists("Depo/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " kalıcı olarak depolanamadı. Aynı adı taşıyan başka bir dosya bulunmakta. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "Depo/" . $_FILES["file"]["name"]);
echo "Kalıcı depo adresi: " . "Depo/" . $_FILES["file"]["name"];
}
}
?>

şeklinde olmalıdır. Eklediğimiz satırların yaptığı işlere gelince,

if (file_exists("Depo/" . $_FILES["file"]["name"]))- Yüklediğimiz dosyanın Depo adlı klasörün içinde olup olmadığını kontrol ediyor. Eğer aynı adı yaşıyan başka bir dosya bulunuyorsa, hata veriyor ve dosyayı taşımıyor. Eğer aynı adı taşıyan başka bir dosya bulunmuyorsa, move_uploaded_file($_FILES["file"]["tmp_name"], "Depo/" . $_FILES["file"]["name"]) komutu ile geçici olarak oluşturulan dosyayı Depo klasörünün içerisine kopyalıyor. Ancak geçici olarak yüklenen dosyaları taşıyacağımız klasörün oluşturulmuş olması gerekmektedir. Php ile dosya yüklerken yapabileceklerimiz bunlarla da sınırlı değil. Yükleyeceğimiz dosyaların türlerini ya da boyutlarını da kontrol etmemiz mümkündür. Yapmamız gereken sadece küçük bir if cümleciği yazıp kontrol sağlamaktır.

E-mail Gönderilmesi

PHP yardımı ile mail gönderimi oldukça kolay olmaktadır. Tek yapmamız gereken,

<?
$to = "berkankisaoglu@hede.com"; /*mailin kime yollanacağı */
$subject = "PHP ile mail atıyorum."; /* mailin konusu */
$message = "Bu mesajın içerin kısmıdır. Buraya yazdıklarım mesajın içeriği olarak gözükecektir."; /* mailin içeriği */
$from = "berkankisaoglu@hödö.com"; /* maili kimin yolladığı */
$headers = "From: $from"; /* From, Cc, Bcc gibi ek özellikler */

mail($to,$subject,$message,$headers);
echo "Mail başarı ile yollandı.";
?>

şeklindeki söz dizimini aklımızda tutmak. Bu şekildeki bir kullanımda yaptıklarımız, değişkenlerimizi hazırlamak ve mail() fonksiyonunu kullanarak mailimizi yollamak. mail() fonksiyonunun kullanımına da değinecek olursak,

mail("mailin kime gönderileceği", "mailin konusu", "mailimizin içeriği", "mailin kimin yolladığı", "Mailimize From, Cc, Bcc gibi ek olarak ekleyeceğimiz özellikler") şeklinde bir kullanıma sahiptir. Eğer mailimizi metin olarak değil de HTML formatında yollayacak olsaydık yapmamız gerekenler biraz daha değişik olacaktı. Mesajımızın içerik kısmına HTML formatında mesajımızı yazacaktık. Buna da ek olarak headers kısmına da,

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";

eklememiz gerekiyor. Eklediğimiz özellikler gönderdiğimiz mailin karakter kodlaması gibi olması gereken özelliklerin tanımlanmasını sağlamaktadır. Bu nedenle de oldukça önemlidir.

<?
$to = "berkankisaoglu@hede.com"; /*mailin kime yollanacağı */
$subject = "PHP ile HTML maili atıyorum."; /* mailin konusu */
$message = " <html> <head> <title> HTML mail </title> </head> <body> <p> Buraya yazılar, resimler eklenebiliyor. Çok da güzel oluyor eklenince. :) </p> </body> </html>";";
$from = "berkankisaoglu@hödö.com"; /* maili kimin yolladığı */
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: ' . "\r\n";

mail($to,$subject,$message,$headers);
echo "Mail başarı ile yollandı.";
?>

şeklindeki bir kullanımla e-maillerimizi HTML formatında da atabiliyoruz.

Oturum Yönetimi

İnternette oturumlar aslında bizler için çok da yabancı olmayan bir kavramlar olsa gerek. İnternette gezinirken hemen hemen her sitenin kendisine özgü bir oturum yönetim biçimi vardır, ve bizler de bir şekilde bu oturumların birer parçası oluruz. Şimdi yapacaklarımız ise, oturumların birer parçası olmaktan da öte oturumların hangi mantıkla çalıştırıldığını, bizler sitelerde dolaşırken arkaplanda hangi betiklerin çalıştırıldığını kavramaya yönelik şeyler olacaktır. Öncelikle PHP'de oturum yönetimi ile ilgili bilmemiz gereken temel birkaç bilgi bulunmakta. Bunlar:

session_start(); : HTML tagları başlamadan önce sayfanın en üstüne yazılır. Çünkü browser sayfayı okurken en üstten en dibe doğru okuyarak değerlendirdiği için, HTML kısmında verilerin gösterilmesi yapılmadan önce oturumun kime ait olduğuna karar verilmelidir. Böylece, oturumdan oturuma değişecek olan veriler önceden belirlenmiş olur.

$_SESSION[] : $_SESSION[] değişkeni o anki oturumla ilgili olan değişkenleri tutmakta görevli olan varsayılan olarak gelen değişkendir.

session_destroy(); : $_SESSION[] değişkeni ile saklanan herhangi bir oturum değişkenini silmeye, ya da komple olarak oturumla ilgili bütün değişkenleri silmeye yarar.

Kısaca tüm bu fonksiyonlara birer işlevsellik kazandıracak olursak, a.php adlı bir dosya oluşturup içerisine,

<form action="b.php" method="post">
	<input type="text" name="isim" value="" />
	<input type="password" name="sifre" value="" />
	<input type="submit" value="submit" />
</form>

kodlarını yazıp kaydedelim. b.php sayfasını, aşağıdaki gibi düzenleyelim,

<?
$ad=$_POST['isim'];
$sif=$_POST['sifre'];

session_start();
if($ad=="berkan" && $sif=="12345")
{
$_SESSION['kullanici']="1";
echo $_SESSION['kullanici'] . "<br />";
}
else
{
$_SESSION['kullanici']="0";
echo $_SESSION['kullanici']. "<br />";
?>
< a href="c.php"> Tiklarsan c.php sayfasına gider.!

c.php sayfasını ise,

<?
session_start();
if($_SESSION['kullanici']=="1") {
echo "Bu sayfa senin oturumun içindir. İstediğini yaparsın" . "<br />";
echo $_SESSION['kullanici'];
}
else {
echo "Maalesef bu sayfayı görüntülemeye hakkınız yok..!" . "<br />";
echo $_SESSION['kullanici'];
}
?>

Şeklinde düzenleyip, a.php sayfasından itibaren basamak basamak ilerleyecek olursak,

  • a.php sayfasında formu doldurup bilgilerimizi b.php sayfasına yolluyoruz.
  • b.php sayfasında oturumu başlatıp, verileri değerlendirmeye alıyoruz. Eğer formdan gelen verilerde ad= berkan şifre= 12345 ise $_SESSION['kullanici'] adındaki bir değişkene 1 değerini atıyoruz. Aksi taktirde değişkenimize 0 değerini veriyoruz ve $_SESSION['kullanici'] değişkenin değerini ekrana yazdırıyoruz. Eğer en altta vermiş olduğumuz linke tıklarsak, c.php sayfasını ziyaret etmiş oluyoruz.
  • c.php sayfasında ise, $_SESSION['kullanici'] değişkeninin değerini inceleyerek içeriğimizde değişiklikler yapıyoruz.

Çerezler (Cookies)

Çerezler (cookies) bilgisayarımızla girmiş olduğumuz internet sitesi arasında bir köprü oluşturmak adına, internet siteleri tarafından kullanılan tarayıcı aracılığı ile kullanıcının bilgisayarında oluşturduğu küçük çaplı dosyalardır. Daha önceden girmiş olduğumuz bir web sayfası tarafından eğer sistemimize çerez yüklenmişse, ve çerezin süresi de dolmamış ise, aynı sayfaya bir sonraki girişimizde otomatik olarak web sayfası sistemimizdeki çerezden haberdar olacaktır ve web sayfasına iletilecektir. PHP de çerezlerin kullanımına geldiğimiz zaman ise, bazı önemli yapılar karşımıza çıkarlar. Bunlar,

setcookie() : Bu fonksiyon web sayfası tarafından sistemimize yüklenecek olan çerezi belirler. Birkaç tane parametre almaktadır, fakat en önemlileri, çerezin adı, değeri ve bitiş süresidir.

<?
setcookie(çerez adı, değeri, bitiş süresi);
?>

şeklinde kullanılır.

<?
setcookie("cookie1", "berkan", time()+3600);
?>

şeklinde bir kullanımla bilgisayarımızda "cookie1" adında bir çerez dosyası oluşturup ona "berkan" değerini atadık. Oluşturduğumuz bu çerez, 1 saat boyunca bilgisayarımızda geçerliliğini koruyacak ( time()+3600 ).

$_COOKIE : Bu değişken sayesinde bir kullanıcının bilgisayarına yazılmış olan çerezin tekrardan okunması gerçekleştirilebilmektedir.

<?
setcookie("cookie1", "berkan", time()+3600);

if (isset($_COOKIE['cookie1']))
echo $_COOKIE['cookie1'];
else
echo "Çerez bulunamadı."
?>

şeklindeki bir kullanımla önce setcookie() fonksiyonu kullanılarak "cookie1" adında çerez dosyası oluşturduk. Daha sonra da $_COOKIE['cookie1'] değişkenini kullanarak oluşturmuş olduğumuz çerezin değerini ekrana yazdırıyoruz.

Evet, böylelikle PHP derslerinin sonuna da gelmiş bulunmaktayız. Biraz pratikle kullanılan betiklere karşı aşinalık kazanıp, daha da kendimizi geliştirmemiz için hiç bir engel kalmamış bulunmakta. Daha başka yazılarda daha güzel günlerde görüşmek dileğiyle...



Berkan Kısaoğlu
- 4 -