Modern PHP’ye Giriş: Temeller, En İyi Uygulamalar ve Mini Proje

PHP, dinamik web uygulamaları geliştirmek için en yaygın kullanılan sunucu tarafı dillerden biridir. Bu yazıda PHP’nin çalışma mantığı, modern araçlar, güvenlik ve performans pratikleri ile küçük bir örnek proje anlatılmaktadır.

Etiketler: PHP, Web Geliştirme, Back‑End

PHP Nedir, Nasıl Çalışır?

PHP (Hypertext Preprocessor), sunucu tarafında çalışan, HTML ile kolayca entegre olan bir programlama dilidir. İstemci (tarayıcı) bir URL’yi talep eder; web sunucusu bu isteği PHP yorumlayıcısına iletir, PHP betiği çalışır ve sonuç olarak HTML/JSON gibi bir çıktı döner.

Hızlı Kurulum: Localhost & Docker

  • Hızlı başlat: XAMPP/MAMP gibi paketlerle Apache + PHP + MySQL’i tek seferde kurabilirsiniz.
  • Docker yaklaşımı: İzole, taşınabilir ve ekipler için idealdir.
# docker-compose.yml örneği (özet)
services:
  web:
    image: php:apache
    volumes:
      - ./src:/var/www/html
    ports:
      - "8080:80"
  db:
    image: mysql:8
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=app

Temel Sözdizimi & Veri Yapıları

<?php
// Değişkenler ve diziler
$name = "Tayyip";
$skills = ["PHP", "HTML", "CSS"];

// Koşullar ve döngüler
if (in_array("PHP", $skills)) {
    echo "PHP geliştiricisi";
}

foreach ($skills as $s) {
    echo "\n- $s";
}

// Fonksiyon ve tür ipuçları
function sum(int $a, int $b): int {
    return $a + $b;
}

echo sum(3, 5);

Veritabanı: PDO ile Güvenli Erişim

Prepared statement kullanmak, SQL enjeksiyonuna karşı temel savunmadır.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=app;charset=utf8mb4', 'root', 'secret', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

$stmt = $pdo->prepare('SELECT id, title FROM notes WHERE user_id = :uid');
$stmt->execute(['uid' => 1]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: application/json');
echo json_encode($rows);

Modern Araçlar: Composer, PSR, Çevre Değişkenleri

  • Composer: Bağımlılık yönetimi ve autoload (PSR‑4) için standart araç.
  • PSR: Kod standartları (PSR‑12), otomatik yükleme (PSR‑4), HTTP mesajları (PSR‑7).
  • .env: Duyarlı yapılandırmaları koddan ayırın; vlucas/phpdotenv gibi paketlerle okuyun.
# composer.json (özet)
{
  "require": {
    "vlucas/phpdotenv": "^5.0"
  },
  "autoload": {
    "psr-4": { "App\\": "src/" }
  }
}

Güvenlik Kontrol Listesi

  • Girdi doğrulama ve filtreleme (server-side).
  • CSRF koruması (token), XSS’e karşı htmlspecialchars.
  • Şifreler için password_hash / password_verify.
  • Hazır ifadeler (prepared statements) ve en az ayrıcalıklı DB kullanıcıları.
  • Hata mesajlarını kullanıcıya göstermeyin; loglayın.

Performans İpuçları

  • OPcache’i etkinleştirin.
  • N+1 sorgularından kaçının; sorguları indeksleyin.
  • Statik dosyaları CDN üzerinden servis edin.
  • Autoload’u optimize edin (composer dump-autoload -o).

Mini Proje: Basit Not Uygulaması (REST)

Tek dosyalık router ve PDO ile küçük bir REST API örneği.

<?php
// public/index.php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];

$pdo = new PDO('mysql:host=localhost;dbname=app;charset=utf8mb4', 'root', 'secret', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

function json($data, $code=200) {
    http_response_code($code);
    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

if ($path === '/notes' && $method === 'GET') {
    $notes = $pdo->query('SELECT id, title, body FROM notes ORDER BY id DESC')
                 ->fetchAll(PDO::FETCH_ASSOC);
    json($notes);
}

if ($path === '/notes' && $method === 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    $stmt = $pdo->prepare('INSERT INTO notes(title, body) VALUES(:t, :b)');
    $stmt->execute(['t' => $input['title'] ?? '', 'b' => $input['body'] ?? '']);
    json(['id' => $pdo->lastInsertId()], 201);
}

json(['error' => 'Not Found'], 404);

Sık Sorulan Sorular

PHP hâlâ öğrenmeye değer mi?

Evet. Mevcut ekosistem, barındırma kolaylığı ve yaygın CMS/çerçeveler (WordPress vb.) sayesinde güçlü bir iş alanı sunar.

Framework kullanmalı mıyım?

Küçük projelerde yalın PHP yeterli olabilir; orta-büyük projelerde Laravel/Symfony gibi çerçeveler üretkenliği artırır.

MySQL dışında ne kullanabilirim?

PostgreSQL popüler bir alternatiftir; ayrıca SQLite küçük uygulamalar için idealdir.

Sonuç

Modern PHP; Composer, PSR standartları, güvenli PDO erişimi ve doğru dağıtım stratejileriyle güçlü, sürdürülebilir web uygulamaları geliştirmenizi sağlar. Küçük bir API ile başlayıp test, güvenlik ve performans ekleyerek büyütmek en sağlıklı yoldur.

Yorum Gönder

Daha yeni Daha eski