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.