PHP Yazarken Dikkat Ettiğim Kurallar (ve Etmeniz Gerekenler)

Web tarafında iş yaparken hala en çok tercih edilen dillerden biri PHP. Basit gibi görünür ama işi büyütmeye başladığında dağ gibi sorunlar çıkarabilir. Bu yüzden aşağıdaki kuralları kendime ezberledim. Her projede uygularım. Yazdıklarım bireysel görüş değil, gerçek dünya tecrübeleridir.

1. Proje yapısı net değilse hiçbir şey net değildir

Dosyalar ortada uçuşuyorsa, işler sarpa sarar. Benim yaklaşımım net:

  1. public/ sadece dışarıya açık dosyalar
  2. core/, controllers/, models/, views/ klasörleri net ayrılır
  3. Her şeyin tek bir amacı vardır: okunabilirlik ve sürdürülebilirlik

2. Rewrite kuralı olmadan işe başlamam

İlk işim .htaccess içine şu kuralı yazmak:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

index.php?url=home gibi yapılar görmek istemiyorum. SEO da çöp olur, prestij de.

3. index.php her zaman giriş noktasıdır

Projenin tüm başlangıç noktası public/index.php'dir. Buradan başka hiçbir şey doğrudan çağrılmaz.

Gerekirse buraya güvenlik kontrolü, autoload, router her şeyi eklerim ama asla başka dosyadan direkt echo yapılmaz.

4. PDO ya da ORM harici veri çekilmez

mysqli_query kullanmak demek davetiye göndermek demektir.

Ben her projede ya PDO ile çalışırım ya da küçük bir kendi ORM yapımı kullanırım. Hazırlanmış sorgular (prepared statement) artık zorunluluktur.

5. Global fonksiyon kullanmam, class yapısı şart

Vanilla PHP bile olsa, her işin bir sınıfı olur. Global fonksiyonlar proje büyüyünce baş belası olur.

Helper fonksiyon gerekiyorsa bile ya bir Helper sınıfı içinde statik olarak tutarım, ya da namespace ile izole ederim.

6. .env dosyası dışarı sızdırılmaz

Tüm gizli bilgileri .env dosyasına koyarım, ama asla public/ içinde tutmam.

.gitignore'a da eklerim. Apache varsa .htaccess ile dışarı kapatırım.

7. Dosya ve dizin izinleri:

  1. Tüm dizinler: 755
  2. Tüm dosyalar: 644
  3. upload, logs, cache gibi dizinler gerekiyorsa: www-data sahibi yapılır

Yanlış izin = 403 veya güvenlik açığı demek.

8. Her hatayı kullanıcıya göstermez, loglarım

  1. ini_set("display_errors", 0); ile kullanıcıya gösterim kapatılır
  2. error_log() ile log dosyasına yazılır
  3. Proje içinde logs/ klasörü olur, dışarıya kapalıdır

9. Başkasıyla paylaşacaksam README ve setup script yazarım

Kendi yazdığım şeyi 2 hafta sonra kendim bile anlamıyorsam, başkasından ne bekliyorum?

  1. readme.md ile proje kurulum ve yapısını yazarım
  2. Gerekirse install.php ya da init.sh gibi küçük kurulum scriptleri eklerim

Sonuç

PHP basit diye küçümsenecek bir dil değil. Kurallı yazarsan her şeye yeter.

Benim kuralım belli: Kod sadece çalışmak için değil, büyümek için yazılır.

Kodun iş bitirmeli. Ama yarın da çalışmalı. Bunlara dikkat etmezsen, PHP seni döver.