Merhaba Dünya!
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:
public/sadece dışarıya açık dosyalarcore/,controllers/,models/,views/klasörleri net ayrılır- 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:
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:
- Tüm dizinler:
755 - Tüm dosyalar:
644 upload,logs,cachegibi dizinler gerekiyorsa:www-datasahibi yapılır
Yanlış izin = 403 veya güvenlik açığı demek.
8. Her hatayı kullanıcıya göstermez, loglarım
ini_set("display_errors", 0);ile kullanıcıya gösterim kapatılırerror_log()ile log dosyasına yazılır- 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?
readme.mdile proje kurulum ve yapısını yazarım- Gerekirse
install.phpya dainit.shgibi 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.