PHP geliştirirken, hem kodlama hataları hem de sunucu yapılandırmasından kaynaklanan hatalarla karşılaşmak mümkündür. Bu rehberde, en sık görülen PHP hataları, nedenleri ve çözümleri ele alınacaktır.
1. Parse Error (Sözdizimi Hatası)
📌 Hata Mesajı Örneği:
Parse error: syntax error, unexpected 'echo' (T_ECHO) in index.php on line 10
📌 Nedeni:
- Eksik veya yanlış kullanılan noktalı virgül (;)
- Yanlış string veya fonksiyon kullanımı
- Parantez veya süslü parantez eksikliği
📌 Çözüm:
✅ Kodunuzu dikkatlice inceleyin, eksik veya yanlış yerleştirilmiş noktalı virgülleri ve parantezleri düzeltin.
✅ PHP linter ile kodu kontrol edin:
php -l index.php
2. Fatal Error (Ölümcül Hata)
📌 Hata Mesajı Örneği:
Fatal error: Uncaught Error: Call to undefined function customFunction() in index.php on line 15
📌 Nedeni:
- Tanımlanmamış bir fonksiyonun çağrılması
- Gerekli PHP uzantısının yüklü olmaması
- Yanlış sınıf veya nesne kullanımı
📌 Çözüm:
✅ Kullanılan fonksiyonun gerçekten tanımlı olup olmadığını kontrol edin.
✅ PHP uzantıları eksikse yükleyin:
sudo apt install php-mbstring
3. Warning (Uyarı Mesajları)
📌 Hata Mesajı Örneği:
Warning: include(file.php): failed to open stream: No such file or directory in index.php on line 20
📌 Nedeni:
- Dosyanın var olup olmadığını kontrol etmeden
include()
veyarequire()
ile çağrılması - Yanlış dosya yolu kullanımı
📌 Çözüm:
✅ Dosyanın mevcut olup olmadığını kontrol edin:
if (file_exists("file.php")) {
include("file.php");
} else {
echo "Dosya bulunamadı!";
}
4. Undefined Variable (Tanımsız Değişken)
📌 Hata Mesajı Örneği:
Notice: Undefined variable: username in index.php on line 5
📌 Nedeni:
- Değişken tanımlanmadan önce kullanılmış
- Global değişkenler
$_POST
,$_GET
,$_SESSION
eksik olabilir
📌 Çözüm:
✅ Değişkenin tanımlandığından emin olun:
$username = isset($_POST['username']) ? $_POST['username'] : '';
5. Headers Already Sent (Başlıklar Zaten Gönderildi)
📌 Hata Mesajı Örneği:
Warning: Cannot modify header information - headers already sent by (output started at index.php:5) in index.php on line 10
📌 Nedeni:
header()
veyasetcookie()
çağrılmadan önce ekrana çıktı verilmiş olması- PHP dosyasının başında veya sonunda gereksiz boşluk veya satır bulunması
📌 Çözüm:
✅ Çıktıyı temizleyin:
ob_start();
header("Location: dashboard.php");
ob_end_flush();
✅ PHP dosyanızda BOM (Byte Order Mark) olup olmadığını kontrol edin.
6. Maximum Execution Time Exceeded (Maksimum Çalışma Süresi Aşıldı)
📌 Hata Mesajı Örneği:
Fatal error: Maximum execution time of 30 seconds exceeded in script.php on line 25
📌 Nedeni:
- PHP betiğinin çok uzun süre çalışması
- Döngülerin sonsuz hale gelmesi
📌 Çözüm:
✅ Maksimum çalışma süresini artırabilirsiniz:
set_time_limit(60);
✅ Sonsuz döngüler olup olmadığını kontrol edin.
7. Allowed Memory Size Exhausted (Bellek Limiti Aşıldı)
📌 Hata Mesajı Örneği:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in script.php on line 30
📌 Nedeni:
- Çok fazla veri işlenmesi (büyük array’ler, büyük dosya yüklemeleri)
- Bellek sızıntıları (Memory Leak)
📌 Çözüm:
✅ PHP’nin bellek limitini artırabilirsiniz:
ini_set('memory_limit', '256M');
✅ Daha verimli bellek yönetimi sağlayın:
unset($large_array);
8. MySQL Connection Failed (Veritabanına Bağlanamıyor)
📌 Hata Mesajı Örneği:
Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
📌 Nedeni:
- Yanlış veritabanı kimlik bilgileri
- MySQL servisi çalışmıyor olabilir
📌 Çözüm:
✅ Bağlantı bilgilerinin doğru olduğunu kontrol edin:
$conn = new mysqli("localhost", "root", "password", "veritabani");
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}
✅ MySQL servisini başlatın:
sudo systemctl restart mysql
9. CSRF ve XSS Güvenlik Açıkları
📌 Hata: Kullanıcı giriş formlarında güvenlik açıkları
📌 Nedeni: Kullanıcı girişleri doğrudan işleniyor ve filtrelenmiyor
📌 Çözüm:
✅ Cross-Site Scripting (XSS) önleme:
$username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
✅ CSRF koruması ekleyin:
session_start();
$csrf_token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $csrf_token;
10. File Upload Errors (Dosya Yükleme Hataları)
📌 Hata Mesajı Örneği:
Warning: move_uploaded_file(): Unable to move file to destination
📌 Nedeni:
- Yanlış dosya izinleri
- PHP
upload_max_filesize
ayarının düşük olması
📌 Çözüm:
✅ Dosya izinlerini ayarlayın:
chmod 755 /var/www/html/uploads
✅ PHP dosya yükleme limitini artırın:
ini_set('upload_max_filesize', '10M');
Sonuç
📌 PHP geliştirme sırasında en sık karşılaşılan hatalar ve çözümleri şunlardır:
✅ Sözdizimi hatalarını php -l dosya.php
ile kontrol edin.
✅ Fatal hatalar için fonksiyon ve sınıfların tanımlı olup olmadığını kontrol edin.
✅ Hata loglarını görmek için error_reporting(E_ALL);
kullanın.
✅ Bellek ve zaman limitlerini optimize edin.
✅ Güvenlik açıklarına karşı CSRF ve XSS önlemleri alın.
🚀 PHP projelerinizin hatasız çalışması için düzenli hata kontrolleri yapmayı unutmayın!