PHP mi Python mı: Backend için Hangi Dili Öğrenmelisiniz
Yıllarca hem PHP hem de Python projelerinde çalıştım ve her ikisini de aynı ciddiyetle öğrendim. Şunu söyleyeyim: bu soruyu soran kişiye göre cevap değişiyor. Ama genellikle insanlar yanlış soruyu soruyor. “Hangisi daha iyi?” yerine “Benim için hangisi daha mantıklı?” diye sormaları gerekiyor. Bu yazıda her iki dili de gerçek dünya senaryolarıyla karşılaştıracağım, süslü kelimeler kullanmadan.
Neden Bu Karşılaştırma Hala Geçerli
2024 yılındayız ve hala PHP mi Python mı tartışması yapıyoruz. Bunun sebebi şu: internet’in büyük bir bölümü hala PHP ile çalışıyor. WordPress, Drupal, Magento gibi devler PHP ekosisteminde. Öte yandan Python, data science patlamasıyla birlikte backend geliştirmede de ciddi bir oyuncu haline geldi. Django ve FastAPI projeleri her geçen gün daha fazla tercih ediliyor.
Bir sysadmin veya DevOps mühendisi olarak bakış açınız biraz farklı olmalı. Siz sadece kodu yazan kişi değilsiniz, aynı zamanda o kodu deploy eden, monitör eden ve bakımını yapan kişisiniz. Bu yüzden dil seçimi sizin için ekstra bir anlam taşıyor.
PHP: Gerçekler ve Önyargılar
PHP hakkında çok fazla önyargı var. “Eski teknoloji”, “güvensiz”, “dağınık” gibi ifadeler duyuyorsunuz sürekli. Bunların bir kısmı geçmişe dayanıyor, bir kısmı haksız.
Modern PHP, yani PHP 8.x, ciddi bir dil. Tip sistemi gelişti, JIT compiler eklendi, fiber desteği geldi. Eğer hala PHP 5 günlerindeki o kaotik kodu hayal ediyorsanız, güncellenmeniz gerekiyor.
Basit bir PHP 8 örneği:
# PHP 8.2 kurulumu (Ubuntu 22.04)
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-mbstring
php -v
PHP ile basit bir REST endpoint yazalım, vanilla PHP ile:
# index.php
cat > /var/www/html/api.php << 'EOF'
<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$method = $_SERVER['REQUEST_METHOD'];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($method === 'GET' && $path === '/api/status') {
$response = [
'status' => 'ok',
'timestamp' => date('Y-m-d H:i:s'),
'server' => gethostname(),
'php_version' => PHP_VERSION
];
echo json_encode($response, JSON_PRETTY_PRINT);
} else {
http_response_code(404);
echo json_encode(['error' => 'Endpoint bulunamadi']);
}
EOF
Bu kadar basit. Nginx veya Apache kuruyorsunuz, php-fpm ayarlıyorsunuz, çalışıyor. Deployment açısından bakarsak PHP’nin en büyük avantajı şu: neredeyse her shared hosting ortamında çalışıyor, özel bir process manager gerektirmiyor.
PHP’nin Güçlü Yönleri
- Hosting desteği: Dünyanın her yerinde ucuz PHP hosting var. Küçük projeler için maliyet avantajı büyük.
- WordPress ekosistemi: Müşteri istiyorsa WordPress’i yöneteceksiniz. PHP bilmek şart.
- Olgunluk: 30 yıllık geçmişiyle her türlü sorunun çözümü Stack Overflow’da mevcut.
- Laravel: Modern PHP geliştirme için Laravel muhteşem bir framework. Convention over configuration prensibini güzel uyguluyor.
- Düşük giriş bariyeri: Bir PHP dosyasını web sunucusuna koyuyorsunuz, çalışıyor. Başka bir şey gerekmez.
PHP’nin Zayıf Yönleri
- Tip sistemi: Python’a kıyasla hala daha az katı. Tip hatalarını runtime’da yakalamak can sıkıcı olabiliyor.
- Asenkron programlama: PHP temelde senkron bir dil. Swoole gibi çözümler var ama ana stream değil.
- Veri bilimi sıfır: Python’un numpy, pandas, sklearn ekosistemine PHP’de denk bir şey yok. Veri işleme yapacaksanız PHP size cevap veremez.
- Modern tool chain: Composer iyileşti ama npm veya pip kadar zengin değil.
Python: Neden Bu Kadar Popüler
Python’un popülerliği tesadüf değil. Dil tasarımı açısından temiz, okunabilir ve tutarlı. Bir Python kodunu 5 yıl sonra açtığınızda ne yaptığını anlayabiliyorsunuz. PHP’de aynı şeyi söylemek her zaman mümkün değil.
# Python 3.11 kurulumu ve virtual environment
sudo apt install python3.11 python3.11-venv python3-pip
python3.11 -m venv /opt/myapp/venv
source /opt/myapp/venv/bin/activate
pip install fastapi uvicorn sqlalchemy psycopg2-binary
FastAPI ile aynı endpoint’i yazalım:
# main.py
cat > /opt/myapp/main.py << 'EOF'
from fastapi import FastAPI
from datetime import datetime
import socket
import platform
app = FastAPI()
@app.get("/api/status")
async def get_status():
return {
"status": "ok",
"timestamp": datetime.now().isoformat(),
"server": socket.gethostname(),
"python_version": platform.python_version()
}
@app.get("/api/health")
async def health_check():
return {"healthy": True}
EOF
# Systemd service dosyasi
cat > /etc/systemd/system/myapp.service << 'EOF'
[Unit]
Description=FastAPI Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
Environment=PATH=/opt/myapp/venv/bin
ExecStart=/opt/myapp/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
Burada fark ettiğiniz bir şey var: Python uygulaması için ayrı bir process yöneticisi gerekiyor. PHP-FPM gibi hazır bir şey yok. Bu ekstra operasyonel yük demek. Ama karşılığında async desteği, tip güvenliği ve çok daha zengin bir ekosistem alıyorsunuz.
Python’un Güçlü Yönleri
- Okunabilirlik: Kod incelemeleri ve ekip çalışması için ideal. Yeni birini projeye dahil etmek daha kolay.
- Ekosistem zenginliği: pip ile 400.000’den fazla paket. Her şey için kütüphane var.
- Asenkron programlama: asyncio, FastAPI ile gerçek async programlama. Yüksek eşzamanlılık gereken yerlerde güçlü.
- Veri bilimi entegrasyonu: Backend servisiniz ML modeli çalıştıracaksa Python doğal seçim. TensorFlow, PyTorch, scikit-learn hepsi Python.
- Tip sistemi: Python 3.5+’dan itibaren type hints, mypy ile statik analiz.
- Test kültürü: pytest ekosistemi oldukça güçlü. TDD yapmak PHP’ye göre daha keyifli.
Python’un Zayıf Yönleri
- GIL problemi: Global Interpreter Lock nedeniyle CPU-bound işlerde gerçek paralel çalışma yok. Multiprocessing ile aşılıyor ama ekstra karmaşıklık.
- Deployment karmaşıklığı: Virtual environment, process manager, reverse proxy. Basit bir şey için çok katman.
- Bellek kullanımı: PHP-FPM’e kıyasla Python uygulamaları genellikle daha fazla bellek tüketiyor.
- Hız: CPython yorumlayıcısı PHP 8’in JIT’ine kıyasla bazı senaryolarda daha yavaş.
Deployment Perspektifi: Sysadmin Gözüyle
Burada konuşmamın asıl amacı bu. Kod yazmayı öğrenmekten çok, bu dillerin operasyonel yükünü karşılaştıralım.
PHP deployment’ı klasik bir senaryoda şöyle işliyor:
# Nginx + PHP-FPM konfigurasyonu
cat > /etc/nginx/sites-available/phpapp << 'EOF'
server {
listen 80;
server_name example.com;
root /var/www/phpapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~ /.ht {
deny all;
}
}
EOF
ln -s /etc/nginx/sites-available/phpapp /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Python için Nginx reverse proxy kurulumu:
# Python app icin Nginx reverse proxy
cat > /etc/nginx/sites-available/pythonapp << 'EOF'
upstream pythonapp {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
keepalive 32;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://pythonapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_buffering off;
}
location /health {
proxy_pass http://pythonapp/api/health;
access_log off;
}
}
EOF
PHP’de worker sayısını artırmak için php-fpm.conf’u düzenliyorsunuz ve işi bitiyor. Python’da ya birden fazla port açıyorsunuz ya da Gunicorn/Uvicorn’un worker parametresini ayarlıyorsunuz. İkisi de yapılabilir ama Python tarafı biraz daha fazla ince ayar istiyor.
Konteyner Dünyasında Durum
Docker ile her şey biraz daha eşitleniyor. Konteyner içindeki uygulamayı dışarıdan bakıldığında ayırt etmek zorlaşıyor. Ama yine de farklar var.
# PHP Dockerfile - minimal
cat > Dockerfile.php << 'EOF'
FROM php:8.2-fpm-alpine
WORKDIR /var/www/html
RUN docker-php-ext-install pdo pdo_mysql opcache
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
EOF
# Python Dockerfile - minimal
cat > Dockerfile.python << 'EOF'
FROM python:3.11-slim
WORKDIR /app
RUN adduser --disabled-password --gecos '' appuser
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN chown -R appuser:appuser /app
USER appuser
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]
EOF
Image boyutlarına bakarsanız python:3.11-slim genellikle php:8.2-fpm-alpine’den biraz daha büyük çıkıyor. Büyük projede bu fark önemsizleşiyor, küçük ve çok sayıda microservice çalıştırıyorsanız dikkate alınabilir.
Gerçek Dünya Senaryoları
Senaryo 1: E-ticaret sitesi Müşteri WooCommerce istiyor. PHP biliyorsanız hayatınız kolaylaşıyor. WordPress eklentilerini, hooks sistemini, veritabanı yapısını anlamak için PHP bilmek gerekiyor. Python bu senaryoda size bir şey kazandırmıyor.
Senaryo 2: Dahili API servisi Şirketin farklı sistemlerini bağlayan bir REST API. Ekip Python biliyor, ML ekibiyle entegrasyon söz konusu. FastAPI veya Django REST Framework ile gidin. Hem async desteği hem de ML modellerini direkt import etme kolaylığı var.
Senaryo 3: Yüksek trafikli içerik sitesi Günde 10 milyon sayfa görüntülemesi, içerik ağırlıklı site. PHP + Redis + CDN kombinasyonu hala çok güçlü. Laravel ile iyi bir OPCache konfigürasyonu ve Redis cache ile sağlam bir performans elde edebilirsiniz. Bunu kanıtlayan sayısız üretim ortamı var.
Senaryo 4: DevOps otomasyon araçları Sunucu yönetimi, log analizi, monitoring scriptleri. Burada Python açık ara kazanıyor. Ansible Python ile yazılmış, Fabric Python ile çalışıyor, pek çok monitoring aracının API’si Python kütüphanesi sunuyor. Sysadmin olarak Python öğrenmek size doğrudan iş verimi sağlıyor.
Öğrenme Yolu Önerileri
PHP öğrenmek istiyorsanız şu sırayla gidin: önce vanilla PHP ile form işleme, veritabanı bağlantısı, session yönetimi. Sonra Composer paket yöneticisini öğrenin. Ardından Laravel. Bu üçüncü adımda modern PHP geliştirmenin tamamına hakim oluyorsunuz.
Python için şu sıra: temel syntax ve veri yapıları, ardından pip ve virtual environment yönetimi ki bunu sysadmin olarak zaten biliyorsunuzdur. Sonra Flask ile basit bir API yazın. Son olarak FastAPI veya Django ile production-grade bir uygulama geliştirin.
# Python projesinde bagimliliklari yonetmek
python3 -m venv venv
source venv/bin/activate
# Bagimlilikları dondur
pip freeze > requirements.txt
# Gelistirme ve production bagimliliklari ayirmak
pip install -r requirements.txt # production
pip install -r requirements-dev.txt # development (pytest, black, mypy)
# Paket versiyonlarini guncel tut
pip list --outdated
pip install --upgrade paketadi
# PHP'de Composer ile paket yonetimi
# Yeni proje olusturma
composer create-project laravel/laravel myapp
cd myapp
# Paket ekleme
composer require predis/predis
composer require --dev phpunit/phpunit
# Autoload'u optimize et (production)
composer install --no-dev --optimize-autoloader --classmap-authoritative
# Bagimlilikları guncelle
composer update --with-dependencies
composer audit # guvenlik aciklari kontrol
Hangisini Seçmeli
Şimdi asıl soruya dönelim. Seçim kriterleri şunlar:
PHP seçin eğer:
- WordPress ve WooCommerce projeleri yapacaksanız
- Shared hosting ortamlarında çalışıyorsanız
- Ekibinizin PHP geçmişi varsa ve migration maliyeti yüksekse
- PHP Symfony veya Laravel ile çalışan projelere katılacaksanız
- Hızlıca bir prototip çıkarıp müşteriye göstermek istiyorsanız
Python seçin eğer:
- Veri işleme veya ML entegrasyonu gerekecekse
- Sysadmin otomasyon scriptleri yazıyorsanız
- Ekip büyük ve kod kalitesi, tip güvenliği önemliyse
- Modern microservice mimarisi kuruyorsanız
- Uzun vadede Python ekosisteminden faydalanmak istiyorsanız
Sysadmin veya DevOps odaklı bir kariyer hedefliyorsanız Python açık ara daha fazla değer katıyor. Ansible, Terraform provider’ları, monitoring scriptleri, log işleme araçları hepsi Python dünyasında. Bash’in yetersiz kaldığı her yerde Python devreye giriyor.
Sonuç
PHP ve Python arasındaki tartışma çoğunlukla yanlış çerçeveleniyor. Biri diğerinin yerini almıyor, farklı problemleri farklı şekillerde çözüyorlar.
Eğer backend geliştirmeye yeni başlıyorsanız ve sysadmin kariyer yolundasınız, Python’u önceliklendirin. Öğrendiğiniz her Python satırı sadece web backend’de değil, sistem yönetiminde, otomasyonda ve veri işlemede de işe yarıyor. Bu çok yönlülük değerli.
Ama mevcut bir PHP ekosisteminiz varsa, WordPress projeleri yönetiyorsanız veya PHP ile çalışan bir şirkete girecekseniz, PHP öğrenmek için de zaman harcayın. Modern PHP, 10 yıl öncesinin PHP’si değil.
Son olarak şunu söyleyeyim: her iki dili de yüzeysel bilmekten ziyade birini derinlemesine bilmek çok daha değerli. Seçiminizi yapın, o dili gerçek projelerle öğrenin, production’da deploy edin, sorunlarla boğuşun. Kitabi bilgi, konsolun karşısında birkaç gece geçirmeden edinilen deneyimin yanında soluk kalıyor.
