PHP ile Dinamik Web Siteleri Geliştirme: Temelden İleri Seviyeye
PHP (Hypertext Preprocessor), dinamik web siteleri ve web uygulamaları geliştirmek için tasarlanmış, açık kaynaklı ve popüler bir programlama dilidir. 1994 yılında Rasmus Lerdorf tarafından geliştirilen PHP, günümüzde web dünyasında en yaygın kullanılan server-side dillerden biridir. WordPress, Facebook ve Wikipedia gibi büyük projeler, temel olarak PHP üzerine inşa edilmiştir.
Bu makalede, PHP ile dinamik web uygulamaları geliştirme sürecini temelden ileri seviyeye kadar ele alacağız. PHP'nin temel yapısından, modern framework kullanımına, veritabanı entegrasyonundan güvenlik önlemlerine kadar kapsamlı bir rehber sunacağız.
PHP Nedir ve Neden Kullanılır?
PHP, server-side (sunucu taraflı) çalışan bir dildir. Yani kodlar web sunucusunda işlenir ve sonuçlar HTML olarak istemci tarayıcısına gönderilir. Bu özellik, dinamik web sitesi yapımı için PHP'yi ideal kılar. PHP'nin web geliştirme alanında tercih edilmesinin başlıca sebepleri:
- Kolay öğrenilebilir bir sözdizimi vardır
- Hemen hemen tüm web sunucularıyla uyumludur
- Ücretsiz ve açık kaynaklıdır
- Geniş bir topluluk desteği sunar
- MySQL, PostgreSQL gibi veritabanlarıyla kolay entegrasyon sağlar
- WordPress, Drupal, Joomla gibi popüler CMS'ler PHP tabanlıdır
PHP ile Başlangıç
Kurulum ve Ortam Hazırlama
PHP ile web geliştirme serüvenine başlamak için öncelikle geliştirme ortamını hazırlamalısınız. Bunun için XAMPP, WAMP veya MAMP gibi paketler tercih edilebilir. Bu paketler PHP, MySQL ve Apache gibi gerekli tüm bileşenleri içerir.
<?php
// İlk PHP programınız
echo "Merhaba Dünya!";
?>
PHP Temel Sözdizimi
PHP kodları <?php ve ?> etiketleri arasına yazılır. Bu etiketler, sunucuya hangi kodun PHP olarak yorumlanması gerektiğini belirtir. PHP dersleri sırasında öğrenilecek temel kavramlar:
Değişkenler ve Veri Tipleri
<?php
$isim = "Ahmet"; // String
$yas = 25; // Integer
$boy = 1.78; // Float
$ogrenci_mi = true; // Boolean
$hobiler = array("Yüzme", "Kitap Okuma", "Kodlama"); // Dizi
?>
Koşullu İfadeler
<?php
$saat = date("H");
if ($saat < 12) {
echo "Günaydın!";
} elseif ($saat < 18) {
echo "İyi günler!";
} else {
echo "İyi akşamlar!";
}
?>
Döngüler
<?php
// For döngüsü
for ($i = 1; $i <= 5; $i++) {
echo "$i ";
}
// While döngüsü
$sayac = 1;
while ($sayac <= 5) {
echo "$sayac ";
$sayac++;
}
// Foreach döngüsü
$meyveler = array("Elma", "Armut", "Muz");
foreach ($meyveler as $meyve) {
echo "$meyve ";
}
?>
Fonksiyonlar
<?php
function selamla($isim) {
return "Merhaba, $isim!";
}
echo selamla("Ali");
?>
PHP ile Veritabanı İşlemleri
PHP ile backend geliştirme sürecinde en önemli konulardan biri veritabanı entegrasyonudur. PHP, çeşitli veritabanlarıyla kolay entegrasyon sağlar.
MySQL Bağlantısı
<?php
$sunucu = "localhost";
$kullanici_adi = "root";
$sifre = "";
$veritabani = "blog";
// Bağlantı oluşturma
$baglanti = new mysqli($sunucu, $kullanici_adi, $sifre, $veritabani);
// Bağlantı kontrolü
if ($baglanti->connect_error) {
die("Bağlantı hatası: " . $baglanti->connect_error);
}
echo "Veritabanına başarıyla bağlandı";
?>
CRUD İşlemleri
Dinamik web sitesi yapımı için CRUD (Create, Read, Update, Delete) işlemleri temel önemdedir:
Veri Ekleme (Create)
<?php
$sql = "INSERT INTO makaleler (baslik, icerik, yazar) VALUES ('PHP Dersleri', 'PHP ile web geliştirme', 'Ahmet Yılmaz')";
if ($baglanti->query($sql) === TRUE) {
echo "Yeni kayıt başarıyla oluşturuldu";
} else {
echo "Hata: " . $sql . "<br>" . $baglanti->error;
}
?>
Veri Okuma (Read)
<?php
$sql = "SELECT id, baslik, icerik, yazar FROM makaleler";
$sonuc = $baglanti->query($sql);
if ($sonuc->num_rows > 0) {
while($row = $sonuc->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Başlık: " . $row["baslik"]. " - Yazar: " . $row["yazar"]. "<br>";
}
} else {
echo "Sonuç bulunamadı";
}
?>
Veri Güncelleme (Update)
<?php
$sql = "UPDATE makaleler SET baslik='PHP Dersleri Güncellendi' WHERE id=1";
if ($baglanti->query($sql) === TRUE) {
echo "Kayıt başarıyla güncellendi";
} else {
echo "Hata: " . $baglanti->error;
}
?>
Veri Silme (Delete)
<?php
$sql = "DELETE FROM makaleler WHERE id=1";
if ($baglanti->query($sql) === TRUE) {
echo "Kayıt başarıyla silindi";
} else {
echo "Hata: " . $baglanti->error;
}
?>
PHP Form İşlemleri
Web uygulamalarında kullanıcı etkileşimi genellikle formlar aracılığıyla sağlanır. PHP ile proje geliştirme sürecinde form işlemleri önemli bir yer tutar.
<!DOCTYPE html>
<html>
<head>
<title>PHP Form Örneği</title>
</head>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<label for="isim">İsim:</label>
<input type="text" id="isim" name="isim"><br><br>
<label for="email">E-posta:</label>
<input type="email" id="email" name="email"><br><br>
<input type="submit" value="Gönder">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Form verileri alınıyor
$isim = $_POST["isim"];
$email = $_POST["email"];
// Form verileri doğrulanıyor
if (empty($isim)) {
echo "İsim alanı boş bırakılamaz";
} else {
echo "Merhaba, $isim! E-posta adresin: $email";
}
}
?>
</body>
</html>
PHP ile Oturum Yönetimi
Dinamik web uygulamaları geliştirirken oturum yönetimi (session management) önemli bir konudur. PHP'de oturum, kullanıcıya özel verileri geçici olarak saklamak için kullanılır.
<?php
// Oturum başlatma
session_start();
// Oturum değişkeni oluşturma
$_SESSION["kullanici_adi"] = "ahmet123";
$_SESSION["giris_zamani"] = time();
echo "Oturum başlatıldı!";
?>
<?php
// Oturumu başlat
session_start();
// Oturum değişkenlerini kontrol et
if(isset($_SESSION["kullanici_adi"])) {
echo "Hoş geldin, " . $_SESSION["kullanici_adi"] . "!<br>";
echo "Giriş zamanı: " . date("Y-m-d H:i:s", $_SESSION["giris_zamani"]);
} else {
echo "Lütfen giriş yapın!";
}
?>
<?php
// Oturumu başlat
session_start();
// Oturum değişkenlerini temizle
session_unset();
// Oturumu sonlandır
session_destroy();
echo "Çıkış yapıldı!";
?>
PHP Güvenlik Önlemleri
Web uygulamaları geliştirirken güvenlik, göz ardı edilmemesi gereken bir konudur. PHP best practices takip edilerek güvenli uygulamalar geliştirilebilir.
SQL Injection Önleme
<?php
// Güvensiz yöntem
$kullanici_adi = $_POST["kullanici_adi"];
$sql = "SELECT * FROM kullanicilar WHERE kullanici_adi='$kullanici_adi'";
// Güvenli yöntem (Prepared Statements)
$stmt = $baglanti->prepare("SELECT * FROM kullanicilar WHERE kullanici_adi=?");
$stmt->bind_param("s", $kullanici_adi);
$stmt->execute();
$sonuc = $stmt->get_result();
?>
XSS Önleme
<?php
// Güvensiz yöntem
echo $_POST["yorum"];
// Güvenli yöntem
echo htmlspecialchars($_POST["yorum"]);
?>
Şifre Güvenliği
<?php
// Şifre hashleme
$sifre = "12345";
$hash = password_hash($sifre, PASSWORD_DEFAULT);
// Şifre doğrulama
if (password_verify($sifre, $hash)) {
echo "Şifre doğru!";
} else {
echo "Şifre yanlış!";
}
?>
PHP ile İleri Düzey Konular
Nesne Yönelimli PHP (OOP)
PHP ile backend geliştirme sürecinde OOP (Object-Oriented Programming) yaklaşımı, kodun yeniden kullanılabilirliğini ve organizasyonunu iyileştirir.
<?php
class Kullanici {
// Özellikler
private $isim;
private $email;
// Yapıcı metot (constructor)
public function __construct($isim, $email) {
$this->isim = $isim;
$this->email = $email;
}
// Metotlar
public function getIsim() {
return $this->isim;
}
public function getEmail() {
return $this->email;
}
public function bilgileriGoster() {
return "İsim: " . $this->isim . ", E-posta: " . $this->email;
}
}
// Sınıfı kullanma
$kullanici1 = new Kullanici("Ahmet Yılmaz", "ahmet@ornek.com");
echo $kullanici1->bilgileriGoster();
?>
PHP Framework Kullanımı
Modern web geliştirmede PHP framework kullanımı yaygındır. Laravel, Symfony, CodeIgniter gibi frameworkler, PHP ile proje geliştirme sürecini hızlandırır ve standartlaştırır.
Laravel Örneği
// routes/web.php
Route::get('/blog', 'BlogController@index');
// app/Http/Controllers/BlogController.php
namespace App\Http\Controllers;
use App\Models\Blog;
use Illuminate\Http\Request;
class BlogController extends Controller
{
public function index()
{
$makaleler = Blog::all();
return view('blog.index', ['makaleler' => $makaleler]);
}
}
Composer ile Bağımlılık Yönetimi
composer require monolog/monolog
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Logger oluştur
$log = new Logger('uygulama');
$log->pushHandler(new StreamHandler('logs/uygulama.log', Logger::WARNING));
// Hata kaydet
$log->warning('Bu bir uyarı mesajıdır');
$log->error('Bu bir hata mesajıdır');
?>
RESTful API Geliştirme
Dinamik web uygulamaları geliştirirken, mobil uygulamalar veya SPA (Single Page Application) için API geliştirmek önemlidir.
<?php
header('Content-Type: application/json');
$veritabani = new mysqli("localhost", "root", "", "api_db");
// Ürünleri getir
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$sql = "SELECT * FROM urunler";
$sonuc = $veritabani->query($sql);
$urunler = [];
while ($row = $sonuc->fetch_assoc()) {
$urunler[] = $row;
}
echo json_encode($urunler);
}
// Yeni ürün ekle
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
$ad = $data['ad'];
$fiyat = $data['fiyat'];
$sql = "INSERT INTO urunler (ad, fiyat) VALUES ('$ad', $fiyat)";
if ($veritabani->query($sql)) {
echo json_encode(['mesaj' => 'Ürün başarıyla eklendi', 'id' => $veritabani->insert_id]);
} else {
echo json_encode(['hata' => 'Ürün eklenemedi']);
}
}
?>
PHP ile Performans Optimizasyonu
PHP best practices içinde performans optimizasyonu önemli bir yer tutar. PHP uygulamalarının hızını artırmak için:
- Opcode Önbellekleme: OPcache veya APCu gibi opcode önbellekleme çözümleri kullanın
- Veritabanı Optimizasyonu: Veritabanı sorgularını optimize edin ve indeksleri doğru kullanın
- CDN Kullanımı: Statik dosyalar için CDN kullanın
- Minify ve Sıkıştırma: CSS, JavaScript ve HTML dosyalarını minify edin ve sıkıştırın
- Lazy Loading: Gerekli olmayan verileri sadece ihtiyaç duyulduğunda yükleyin
PHP 8 ile Gelen Yenilikler
PHP 8, PHP ile web geliştirme dünyasına pek çok yeni özellik ve geliştirme getirmiştir:
- JIT (Just-In-Time) Compiler: Uygulamaların çalışma hızını artırır
- Named Arguments: Fonksiyon argümanlarını sırayla değil isimle belirtme imkanı
- Union Types: Bir değişkenin birden fazla türde veri içerebileceğini belirtme
- Match Expression: Switch ifadesinin daha güçlü bir alternatifi
- Constructor Property Promotion: Sınıf özelliklerini constructor içinde tanımlama
<?php
// PHP 8 Named Arguments
function kullaniciOlustur($isim, $email, $yas, $sehir) {
echo "İsim: $isim, E-posta: $email, Yaş: $yas, Şehir: $sehir";
}
kullaniciOlustur(
email: "ahmet@ornek.com",
yas: 30,
sehir: "İstanbul",
isim: "Ahmet Yılmaz"
);
// PHP 8 Constructor Property Promotion
class Kullanici {
public function __construct(
public string $isim,
public string $email,
public int $yas
) {}
}
$kullanici = new Kullanici("Ahmet", "ahmet@ornek.com", 30);
echo $kullanici->isim; // "Ahmet"
?>
PHP ile dinamik web siteleri geliştirme süreci, temel bilgilerden ileri düzey tekniklere kadar geniş bir yelpazeyi kapsar. Bu makalede, PHP öğrenme rehberi niteliğinde, temel kavramlardan başlayarak OOP, framework kullanımı, güvenlik önlemleri ve performans optimizasyonu gibi ileri düzey konulara değindik.
PHP, sürekli gelişen yapısı ve geniş topluluk desteği ile web geliştirme dünyasında önemli bir yere sahiptir. PHP ile proje geliştirme sürecinde, öğrendiğiniz bilgileri pratiğe dökmek ve güncel kalmak için PHP'nin resmi dokümantasyonunu takip etmenizi öneririz.
Unutmayın ki PHP best practices takip etmek, güvenli, performanslı ve sürdürülebilir uygulamalar geliştirmenin anahtarıdır. Dinamik web uygulamaları geliştirirken, bu makalede bahsedilen teknikleri uygulayarak, profesyonel düzeyde projeler ortaya çıkarabilirsiniz.