8 Aralık 2007 Cumartesi

PHP ile Çeşitli Yardımcı Fonksiyonlar

Merhaba Webkolog takipçileri!

PHP'nin gücü, sadece değişken yönetimi, veritabanı etkileşimi veya oturumlar gibi ana konularla sınırlı değil. Bir web uygulamasının düzgün çalışması için HTTP başlıklarını kontrol etmekten e-posta göndermeye, harici dosyaları dahil etmekten hata yönetimine kadar birçok farklı görevi yerine getirmemiz gerekir. Bu makalede, PHP 5.2 ve önceki versiyonlarında bulabileceğiniz ve günlük programlama hayatınızda sıklıkla karşınıza çıkacak olan çeşitli **yardımcı fonksiyonları** ele alacağım. Gelin, uygulamalarınızı daha işlevsel ve sağlam hale getirecek bu araçları tanıyalım!


1. HTTP ve Çerez Yönetimi

Web sunucusuyla ve istemciyle etkileşim kurmak, yönlendirmeler yapmak veya çerezler aracılığıyla veri saklamak için bu fonksiyonları kullanırız.


<?php
// HTTP başlığı gönderir: header()
// Not: header() fonksiyonu herhangi bir HTML çıktısından önce çağrılmalıdır!

// Yönlendirme örneği:
// header("Location: https://www.webkolog.com");
// exit(); // Yönlendirme sonrası betiği durdurmak iyi bir pratiktir.
// echo "Yönlendirme yapıldı.<br>"; // Bu satır çalışmazdı

// Sayfa yenileme örneği (2 saniye sonra başka bir adrese yönlendirme):
// header("Refresh: 2; url=https://www.webkolog.com/yenile.php");
// echo "Bu sayfa 2 saniye sonra yenile.php adresine yönlendirilecek...<br>";

// İçerik tipini ayarlama (örn: resim dosyası gönderirken)
// header("Content-Type: image/jpeg");
// readfile('resim.jpg'); // Bir resim dosyasının içeriğini doğrudan tarayıcıya gönderir.
// exit();

// Çerez gönderir: setcookie()
// setcookie(isim, değer, bitiş_zamanı, yol, alan, güvenli, http_only)
// PHP 5.2'de son iki parametre (secure, httponly) varsayılan olarak yoktur, ancak eklenebilir.
$cerez_adi = "ziyaret_sayisi";
$cerez_degeri = 1;
// Eğer çerez daha önce ayarlanmışsa değerini artırın
if (isset($_COOKIE[$cerez_adi])) {
    $cerez_degeri = (int)$_COOKIE[$cerez_adi] + 1;
}
// Çerezi 1 saat boyunca geçerli olacak şekilde ayarla
setcookie($cerez_adi, $cerez_degeri, time() + (60 * 60)); // 60 saniye * 60 dakika = 1 saat

echo "Çerez ayarlandı veya güncellendi.<br>";
if (isset($_COOKIE[$cerez_adi])) {
    echo "Şimdiki ziyaret sayısı (önceki istekten): " . $_COOKIE[$cerez_adi] . "<br>";
}

// Çerezi silmek: Değeri boş bırakıp, bitiş zamanını geçmişe ayarla
// setcookie($cerez_adi, "", time() - 3600);
// echo "Çerez silindi.<br>";
?>

2. Dosya Dahil Etme ve Betik Kontrolü

Kod tekrarını azaltmak ve yapıyı düzenli tutmak için sıkça kullanılan kod parçalarını ayrı dosyalara ayırırız. Bu dosyaları ana betiğimize dahil etmek için özel fonksiyonlar kullanılır.


<?php
// include_once.php adında bir dosya oluşturalım
// İçeriği: <?php echo "<p>Bu include_once.php dosyasından geldi.</p>"; ?>

// require_once.php adında bir dosya oluşturalım
// İçeriği: <?php echo "<p>Bu require_once.php dosyasından geldi.</p>"; ?>

echo "
Dosya Dahil Etme Örneği:
"; // Bir sayfayı diğer sayfa üzerine entegre eder: include // Dosya bulunamazsa uyarı verir (Warning), betik çalışmaya devam eder. // include 'dahil_edilecek_dosya.php'; // Gerekli olduğunda dosyayı çağırır: require // Dosya bulunamazsa ölümcül hata verir (Fatal Error), betik durur. // require 'gerekli_dosya.php'; // Bir sayfayı sadece bir kez dahil eder: include_once // Eğer dosya daha önce dahil edilmişse tekrar dahil etmez. echo "<p>include_once.php'yi ilk kez dahil ediyoruz:</p>"; include_once 'include_once.php'; // İlk dahil etme echo "<p>include_once.php'yi ikinci kez dahil etmeye çalışıyoruz (tekrar edilmeyecek):</p>"; include_once 'include_once.php'; // Tekrar dahil edilmez echo "<hr>"; // Gerekli olduğunda dosyayı sadece bir kez çağırır: require_once // Eğer dosya daha önce dahil edilmişse tekrar dahil etmez. echo "<p>require_once.php'yi ilk kez dahil ediyoruz:</p>"; require_once 'require_once.php'; // İlk dahil etme echo "<p>require_once.php'yi ikinci kez dahil etmeye çalışıyoruz (tekrar edilmeyecek):</p>"; require_once 'require_once.php'; // Tekrar dahil edilmez echo "<hr>"; // Betiğin çalışmasını durdurur ve çıktı verir: die() veya exit() // die("Bu bir ölümcül hatadır! Uygulama durdu."); // exit("Betiği burada sonlandırıyorum!"); echo "Bu satır, eğer die() veya exit() çağrılmadıysa görünecektir.<br>"; ?>

3. Hata Yönetimi ve Bilgilendirme

Uygulamalarınızdaki hataları ve sorunları yönetmek, aynı zamanda PHP ortamınız hakkında bilgi almak için kullanılır.


<?php
// Hata tetikler: trigger_error()
// Hata seviyesi belirtilmezse E_USER_NOTICE olarak tetiklenir.
trigger_error("Bu özel bir uyarıdır!", E_USER_NOTICE);
trigger_error("Kritik bir işlem başarısız oldu!", E_USER_WARNING);
// trigger_error("Uygulama çalışmayı durdurmalı!", E_USER_ERROR); // Bu ölümcül hata verir

echo "Hatalar tetiklendi (fatal error değilse).<br>";

echo "<hr>";

// PHP hosting bilgilerini gösterir: phpinfo()
// Genellikle üretim ortamında kapalı tutulmalıdır, güvenlik açığı oluşturabilir.
// echo "<h5>PHP Bilgileri:</h5>";
// phpinfo(); // Bu fonksiyon tüm PHP yapılandırmasını ve yüklü uzantıları görüntüler.
// exit(); // phpinfo'dan sonra betiği durdurmak iyi bir pratiktir.

// Sistem log bağlantısını kapatır: closelog()
// openlog() ile açılan bir log bağlantısını kapatır.
// Genellikle sistem yöneticileri ve daemon süreçleri için kullanılır.
// closelog();
// echo "Sistem log bağlantısı kapatıldı (varsa).<br>";
?>

4. Şifreleme Fonksiyonları

Kullanıcı şifreleri veya hassas veriler gibi bilgileri güvende tutmak için şifreleme algoritmaları kullanılır.


<?php
$veri = "WebkologSifre123";

// Veriyi MD5 algoritması ile şifreler: md5()
// MD5 tek yönlü bir hash fonksiyonudur, geri çözülemez. Güvenlik için artık önerilmez, çarpışma riskleri vardır.
$md5_hash = md5($veri);
echo "MD5 Hash: " . $md5_hash . "<br>"; // Çıktı: 4b29c9b5a034d6e9d0d86a2f7c0a7e1f (örnek)

// Veriyi SHA1 algoritması ile şifreler: sha1()
// SHA1 de tek yönlü bir hash fonksiyonudur, MD5'ten daha güvenli kabul edilse de artık zayıf kabul edilir.
$sha1_hash = sha1($veri);
echo "SHA1 Hash: " . $sha1_hash . "<br>"; // Çıktı: ef7d27e8a3a0e1b2f3c4d5e6f7a8b9c0d1e2f3g4 (örnek)

echo "<hr>";

// Veriyi Unix crypt() fonksiyonunu kullanarak şifreler: crypt()
// crypt(veri, [salt])
// Salt (bayrak) verilmezse, her çağrıda farklı bir şifreleme döndürebilir (rastgele salt kullanarak).
// Daha güvenli şifreleme için her zaman bir salt kullanın.
// PHP 5.2'de crypt() hala desteklenmektedir, ancak daha yeni PHP'de password_hash() tercih edilir.
$salt = '$1$rasgele$'; // MD5 tabanlı bir salt
$sifreli_veri_crypt = crypt($veri, $salt);
echo "Crypt (MD5-tabanlı salt ile): " . $sifreli_veri_crypt . "<br>"; // Her zaman aynı çıktı verir

$sifreli_veri_crypt_rastgele = crypt($veri); // Salt verilmezse farklılık gösterebilir
echo "Crypt (rastgele salt ile): " . $sifreli_veri_crypt_rastgele . "<br>"; // Her çağrıda farklı çıktı verebilir

// Şifre doğrulama (crypt ile)
// if (crypt($girilen_sifre, $sifreli_veri_crypt) == $sifreli_veri_crypt) {
//     echo "Şifre doğrulandı.<br>";
// }

?>

5. Diğer Yararlı Fonksiyonlar

Metin işleme ve değişken temizliği gibi sık kullanılan görevler için çeşitli fonksiyonlar mevcuttur.


<?php
// HTML ve PHP etiketlerini bir stringden çıkarır: strip_tags()
$html_metin = "<h1>Merhaba <strong>Webkolog!</strong></h1><script>alert('XSS');</script>";
$temiz_metin = strip_tags($html_metin);
echo "Original: " . htmlspecialchars($html_metin) . "<br>";
echo "Temizlenmiş: " . htmlspecialchars($temiz_metin) . "<br>"; // Çıktı: Merhaba Webkolog!alert('XSS');

// İzin verilen etiketleri belirterek kullanma
$izin_verilen_etiketler = "

"; $kismi_temiz_metin = strip_tags($html_metin, $izin_verilen_etiketler); echo "Kısmen Temizlenmiş (izin verilen <h1> <strong>): " . htmlspecialchars($kismi_temiz_metin) . "<br>"; // Çıktı: <h1>Merhaba <strong>Webkolog!</strong></h1>alert('XSS'); echo "<hr>"; // Bir değişkeni siler: unset() $deneme_degiskeni = "Merhaba Dünya"; echo "Başlangıç değeri: " . $deneme_degiskeni . "<br>"; unset($deneme_degiskeni); if (!isset($deneme_degiskeni)) { echo "Deneme değişkeni silindi.<br>"; } // echo $deneme_degiskeni; // Bu satır hata verir çünkü değişken silindi. ?>

PHP'nin sunduğu bu "diğer" fonksiyonlar, web uygulamalarınızı daha eksiksiz, güvenli ve etkileşimli hale getirmeniz için temel yapı taşlarıdır. HTTP başlıklarıyla sunucu-istemci iletişimini yönetmekten, güvenli şifrelemelerle verilerinizi korumaya, kod parçalarını düzenli bir şekilde dahil etmekten hataları yakalamaya kadar birçok kritik görevi bu fonksiyonlar sayesinde yerine getirebilirsiniz. Unutmayın, özellikle güvenlik ve modern uygulama geliştirme pratikleri konusunda her zaman en güncel bilgileri takip etmek önemlidir!

Webkolog'u takipte kalın!

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

0 yorum:

Yorum Gönder