23 Mayıs 2007 Çarşamba

PHP ile Süper Global Değişkenler

Merhaba Webkolog takipçileri!

Web uygulamaları geliştirirken, kullanıcıdan gelen verileri almak, oturum bilgilerini yönetmek veya sunucu ve ortam hakkında bilgi edinmek kritik öneme sahiptir. PHP, bu tür görevleri kolaylaştırmak için süper global değişkenler adı verilen özel değişkenler sunar. Bu değişkenler, kodunuzun her yerinden erişilebilir oldukları için "süper global" olarak adlandırılırlar. PHP 4.1.0 sürümünden itibaren hayatımıza giren bu yapılar, web geliştirmenin temelini oluşturur. Hadi gelin, en sık kullanılan süper global değişkenlere yakından bakalım!


1. $_GET: URL Parametrelerini Yakalama

$_GET süper global dizisi, bir HTTP GET isteğiyle URL üzerinden gönderilen tüm verileri içerir. Genellikle küçük miktardaki verileri (arama sorguları, sayfa numaraları vb.) iletmek için kullanılır. Veriler URL'de açıkça göründüğü için güvenli olmayan hassas bilgiler için kullanılmamalıdır. Ayrıca, tarayıcı ve sunucu sınırlamaları nedeniyle genellikle 255 karakterden fazla veri gönderilmesi önerilmez.


<?php
// URL: ornek.php?urun_id=123&kategori=elektronik

if (isset($_GET["urun_id"])) {
    $urunId = $_GET["urun_id"];
    echo "Ürün ID: " . $urunId . "<br>"; // Çıktı: Ürün ID: 123
}

if (isset($_GET["kategori"])) {
    $kategori = $_GET["kategori"];
    echo "Kategori: " . $kategori . "<br>"; // Çıktı: Kategori: elektronik
} else {
    echo "Kategori bilgisi gelmedi.<br>";
}

// Güvenlik için HTML karakterlerini dönüştürmek önemlidir
$aramaTerimi = isset($_GET['arama']) ? htmlspecialchars($_GET['arama']) : "Yok";
echo "Arama Terimi: " . $aramaTerimi . "<br>";
?>

urlencode() ve urldecode() fonksiyonları, URL'ye özgü karakterleri güvenli bir şekilde kodlamak ve çözmek için kullanılır. htmlspecialchars() ise HTML etiketlerini ve özel karakterleri web sayfasında güvenli bir şekilde görüntülemek için dönüştürür.


2. $_POST: Form Verilerini Güvenli Bir Şekilde Gönderme

$_POST süper global dizisi, bir HTTP POST isteğiyle (genellikle HTML formları aracılığıyla) gönderilen tüm verileri içerir. Bu yöntem, verilerin URL'de görünmemesi ve daha büyük veri miktarlarını gönderebilmesi nedeniyle daha güvenlidir ve genellikle form gönderimleri için tercih edilir. Ancak, sunucuya veri gönderildiği için GET'e göre biraz daha yavaştır.


<?php
// HTML Formu (ornek.html veya aynı PHP dosyası içinde)
/*
<form action="islem.php" method="post">
    Ad: <input type="text" name="kullanici_adi"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" value="Gönder">
</form>
*/

// islem.php (veya aynı PHP dosyası içinde)
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST["kullanici_adi"])) {
        $kullaniciAdi = htmlspecialchars($_POST["kullanici_adi"]);
        echo "Kullanıcı Adı: " . $kullaniciAdi . "<br>";
    }

    if (isset($_POST["email"])) {
        $email = htmlspecialchars($_POST["email"]);
        echo "E-posta: " . $email . "<br>";
    }
} else {
    echo "Form POST metodu ile gönderilmedi.<br>";
}
?>

3. $_REQUEST: Her İki Yoldan Gelen Veriyi Yakalama

$_REQUEST süper global dizisi, hem GET hem de POST metoduyla gönderilen verilere erişmenizi sağlar. Çoğu durumda $_GET veya $_POST'u doğrudan kullanmak daha iyi bir uygulamadır, çünkü verinin nereden geldiğini bilmek, olası güvenlik açıklarını anlamanıza yardımcı olur.


<?php
// URL: ornek.php?sayfa=anasayfa veya Formdan POST ile gelen veri

if (isset($_REQUEST["sayfa"])) {
    $sayfa = htmlspecialchars($_REQUEST["sayfa"]);
    echo "İstenen Sayfa (Request): " . $sayfa . "<br>";
}
?>

4. $_SERVER: Sunucu ve Çalışma Ortamı Bilgileri

$_SERVER süper global dizisi, sunucu, yürütme ortamı ve mevcut istek hakkında çok sayıda bilgi içerir. Bu bilgiler, uygulamanızın davranışını duruma göre değiştirmek veya hata ayıklamak için kullanılabilir.


<?php
echo "

Sunucu Bilgileri:

"; echo "Sayfa Dizin Yolu: " . $_SERVER["DOCUMENT_ROOT"] . "<br>"; echo "Sunucu Adı: " . $_SERVER["SERVER_NAME"] . "<br>"; echo "Sunucu Yazılımı: " . $_SERVER["SERVER_SOFTWARE"] . "<br>"; echo "İstemcinin IP Adresi: " . $_SERVER["REMOTE_ADDR"] . "<br>"; echo "İstek Metodu: " . $_SERVER["REQUEST_METHOD"] . "<br>"; echo "Geçerli Betik Yolu: " . $_SERVER["PHP_SELF"] . "<br>"; echo "Query String: " . $_SERVER["QUERY_STRING"] . "<br>"; echo "Kullanıcı Tarayıcısı (User Agent): " . $_SERVER["HTTP_USER_AGENT"] . "<br>"; // HTTP_REFERER: Hangi sayfadan gelindiğini gösterir (her zaman mevcut olmayabilir ve manipüle edilebilir) if (isset($_SERVER["HTTP_REFERER"])) { echo "Gelinen Sayfa (Referer): " . $_SERVER["HTTP_REFERER"] . "<br>"; } // REQUEST_TIME: İsteğin başladığı zaman damgası (PHP 5.1 sonrası) if (isset($_SERVER["REQUEST_TIME"])) { echo "İstek Zamanı: " . date("Y-m-d H:i:s", $_SERVER["REQUEST_TIME"]) . "<br>"; } ?>

5. $_COOKIE: Kullanıcı Bilgilerini Tarayıcıda Saklama

Çerezler (Cookies), küçük veri parçacıklarıdır ve sunucu tarafından kullanıcının web tarayıcısına gönderilir. Tarayıcı bu çerezleri saklar ve aynı sunucuya yapılan sonraki her istekte geri gönderir. Bu sayede kullanıcı oturumlarını yönetmek, kişiselleştirilmiş deneyimler sunmak veya kullanıcı tercihlerini hatırlamak mümkün olur.

Bir çerez oluşturmak için setcookie() fonksiyonu kullanılır. Bu fonksiyonun HTTP başlıkları (headers) gönderilmeden önce çağrılması gerektiğini unutmayın. Çerezlere erişmek için ise $_COOKIE süper global dizisi kullanılır.


<?php
// Çerez oluşturma: 'kullanici_adi' adında, 'WebkologUser' değerinde ve 1 saat (3600 saniye) geçerli bir çerez
setcookie("kullanici_adi", "WebkologUser", time() + 3600);

echo "

Çerez Bilgileri:

"; // Çerezi okuma if (isset($_COOKIE["kullanici_adi"])) { echo "Hoş Geldin, " . $_COOKIE["kullanici_adi"] . "!<br>"; } else { echo "Kullanici_adi çerezi ayarlanmadı.<br>"; } // Çerez silme (geçmiş bir zamana ayarlayarak) // setcookie("kullanici_adi", "", time() - 3600); // echo "Çerez silindi.<br>"; ?>

6. $_SESSION: Sunucu Tarafında Kullanıcı Oturumu Yönetimi

Oturumlar (Sessions), sunucu tarafında kullanıcı bilgilerini farklı sayfa istekleri arasında saklamak için kullanılır. Çerezlerin aksine, oturum verileri kullanıcının tarayıcısında değil, sunucuda depolanır. Kullanıcıya özel bir oturum kimliği (session ID) atanır ve bu kimlik genellikle bir çerez aracılığıyla tarayıcıda saklanır.

Oturumları kullanmadan önce her PHP sayfasının en başında session_start() fonksiyonunu çağırmalısınız. Oturum verilerine $_SESSION süper global dizisi ile erişilir.


<?php
session_start(); // Oturumu başlat

// Oturum değişkeni atama
$_SESSION["author"] = "Webkolog";
$_SESSION["giris_zamani"] = time();

echo "

Oturum Bilgileri:

"; if (isset($_SESSION["author"])) { echo "Yazar: " . $_SESSION["author"] . "<br>"; } if (isset($_SESSION["giris_zamani"])) { echo "Giriş Zamanı: " . date("Y-m-d H:i:s", $_SESSION["giris_zamani"]) . "<br>"; } // Oturum değişkenini silme // unset($_SESSION["author"]); // Tüm oturum verilerini silme ve oturumu sonlandırma // session_destroy(); // echo "Oturum sonlandırıldı.<br>"; // Oturum hırsızlığına karşı güvenlik: // Kullanıcı girişi başarılı olduğunda oturum ID'sini yenilemek iyi bir güvenlik pratiğidir. /* if (kullaniciBilgileriDogruMu($username, $password)) { session_regenerate_id(true); // Yeni bir oturum ID'si oluştur ve eskisini sil // ... kullanıcının giriş bilgilerini oturuma kaydet ... } */ ?>

7. $_FILES: Dosya Yükleme Bilgileri

$_FILES süper global dizisi, HTML formları aracılığıyla sunucuya yüklenen dosyalar hakkındaki bilgileri içerir. Bu dizi, yüklenen dosyanın geçici adı, gerçek adı, boyutu ve MIME tipi gibi detayları sağlar.


<?php
// HTML Formu (action="yukle.php" method="post" enctype="multipart/form-data")
/*
<form action="yukle.php" method="post" enctype="multipart/form-data">
    Dosya Seçin: <input type="file" name="belge"><br>
    <input type="submit" value="Yükle">
</form>
*/

// yukle.php
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES["belge"])) {
    echo "

Yüklenen Dosya Bilgileri:

"; echo "Geçici Ad: " . $_FILES["belge"]["tmp_name"] . "<br>"; echo "Orijinal Ad: " . htmlspecialchars($_FILES["belge"]["name"]) . "<br>"; echo "Dosya Tipi (MIME): " . $_FILES["belge"]["type"] . "<br>"; echo "Boyut (Bayt): " . $_FILES["belge"]["size"] . "<br>"; // Dosyayı geçici konumdan kalıcı bir yere taşımak için move_uploaded_file() kullanılır // move_uploaded_file($_FILES["belge"]["tmp_name"], "uploads/" . $_FILES["belge"]["name"]); // echo "Dosya yüklendi!"; } else { echo "Dosya yüklenmedi veya form gönderilmedi.<br>"; } ?>

Süper global değişkenler, PHP'nin web tabanlı uygulamalarla etkileşim kurmasını sağlayan temel mekanizmalardır. Kullanıcı girdilerini almak, oturumları yönetmek ve sunucu bilgilerine erişmek için bu dizileri doğru bir şekilde kullanmak, güvenli ve işlevsel web uygulamaları geliştirmenin anahtarıdır. Her birinin kullanım amacını ve güvenlik detaylarını iyi anlamak, sizi daha iyi bir web geliştirici yapacaktır!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve başarılı projeler dilerim!

0 yorum:

Yorum Gönder