PHP PDO ile yazdığınız bir proje yerel makinede sorunsuz çalışabilir; ancak Hostinger gibi paylaşımlı bir ortama taşıdığınızda dosya yolu, veritabanı kullanıcı adı, PHP sürümü ve dosya izinleri gibi pek çok değişken devreye girer. Bu rehber, bir PHP + PDO + MySQL projesini Hostinger’e yüklerken sıkça karşılaşılan hatalar olmadan, kontrol edilebilir bir akışla yayına almanız için tasarlandı.
Akış üç ana parçadan oluşur: yükleme öncesi proje hazırlığı, hPanel üzerinden veritabanı ve dosya kurulumu, son olarak da bağlantı yapılandırması ve hata kontrolü. Adımları sırayla uygulamak, “neden çalışmıyor” sorularını büyük ölçüde ortadan kaldırır.
- Yükleme Öncesi Proje Hazırlığı
- Hostinger hPanel’de MySQL Veritabanı Oluşturma
- Dosyaları Hostinger’e Yükleme Yöntemleri
- PDO Bağlantı Yapılandırması
- Hata Ayıklama ve .htaccess Yapılandırması
- Yaygın Hatalar ve Çözüm Adımları
- Performans ve Güvenlik Kontrol Listesi
- Sonuç
- Sıkça Sorulan Sorular
- 1. Hostinger paylaşımlı pakette PDO uzantısı varsayılan açık mı?
- 2. Veritabanı bağlantısı için localhost mu yoksa özel bir sunucu adı mı yazmalıyım?
- 3. Büyük SQL dökümünü phpMyAdmin’e yükleyemiyorum, ne yapmalıyım?
- 4. Projeyi yükledim ama site beyaz sayfa veriyor. Nereye bakmalıyım?
- 5. config.php dosyasını public_html dışına taşımak şart mı?
Yükleme Öncesi Proje Hazırlığı
Hostinger’e yüklemeden önce projeyi paylaşımlı hosting ortamına uygun hâle getirmek gerekir. Yerel ortamda çalışan ayarların büyük kısmı canlı sunucuda farklı davranır. Pratikte sorunların önemli bir bölümü, hazırlığı atlamaktan kaynaklanır.
Yerel Projede Kontrol Edilmesi Gerekenler
- Veritabanı erişim bilgileri:
localhost,root, boş şifre gibi yerel değerler sabit kodlanmış mı? Bunlar birconfig.phpveya.envdosyasında toplanmalı. - Hata gösterimi:
display_errorscanlıda kapalı olmalı, ancak geliştirme aşamasında loglama açık kalmalı. - Dosya yolları:
__DIR__vedirname(__FILE__)kullanılmalı; mutlak yollar (C:/xampp/...gibi) temizlenmeli. - Charset: Tüm tablolar ve PDO bağlantısı
utf8mb4olmalı. - Composer bağımlılıkları:
vendor/klasörü ya yüklenmeli ya da SSH üzerindencomposer installçalıştırılabilmeli.
Bu kontrolleri tamamladıktan sonra projeyi bir ZIP arşivi olarak hazırlamak, dosyaları tek tek yüklemekten çok daha güvenilir bir yöntemdir.
Hostinger hPanel’de MySQL Veritabanı Oluşturma
Hostinger’in hPanel arayüzünde “Veritabanları” bölümünden yeni bir MySQL veritabanı oluşturulur. Burada üretilen bilgiler, PDO bağlantı satırında kullanılacak temel değerlerdir. Hostinger paylaşımlı planlarda veritabanı adı ve kullanıcı adı genellikle bir önek (örneğin u123456789_) ile başlar; bu önek yerel ortamdaki sade isimlerden farklı olduğu için PDO bağlantısında en sık unutulan ayrıntıdır.
Veritabanı oluşturulduktan sonra phpMyAdmin üzerinden mevcut SQL dökümünü içe aktarabilirsiniz. Büyük dökümlerde phpMyAdmin’in dosya boyutu limiti devreye girebilir; bu durumda SQL’i parçalara bölmek veya Hostinger SSH erişimi ile mysql komutu kullanmak daha sağlıklı bir yoldur.
| Bilgi | Nereden Alınır | PDO’da Karşılığı |
|---|---|---|
| Sunucu adı | hPanel veritabanı detayı | host (genellikle localhost) |
| Veritabanı adı | Oluşturulan DB (ör. u123_app) |
dbname |
| Kullanıcı adı | Atanan kullanıcı (ör. u123_user) |
PDO 2. parametre |
| Şifre | Oluşturma sırasında belirlenir | PDO 3. parametre |
| Charset | Tablonun karakter seti | charset=utf8mb4 |
Dosyaları Hostinger’e Yükleme Yöntemleri
Hostinger’de dosya yüklemek için üç pratik yol vardır: hPanel’in Dosya Yöneticisi, FTP/SFTP istemcisi (FileZilla gibi) ve SSH. Küçük ve orta ölçekli projeler için Dosya Yöneticisi, büyük veya çok dosyalı projeler için FTP daha verimli çalışır.
Dosya Yöneticisi ile ZIP Yükleme
- hPanel içinden hosting hesabını açın, Dosya Yöneticisi bölümüne girin.
public_htmlklasörüne geçin. Hostinger’de canlıya çıkacak tüm içerik bu klasörün altında olmalıdır.- Hazırladığınız proje ZIP dosyasını yükleyin ve sağ tık menüsünden Extract ile açın.
- Açılan klasörün içeriği doğrudan
public_htmlaltında olmalı. Eğer iç içe geçmiş bir klasör (örneğinpublic_html/proje/proje) oluştuysa içeriği yukarı taşıyın.
FTP/SFTP ile Yükleme
- hPanel’den FTP hesabı bilgilerini alın: sunucu adresi, kullanıcı adı ve şifre.
- FileZilla gibi bir istemciye bu bilgileri girin. Port 21 (FTP) yerine güvenli iletim için Hostinger’in desteklediği SFTP/SSH portunu tercih edin.
- Sol panelden yerel proje klasörünü, sağ panelden
public_htmlklasörünü açın ve içerikleri taşıyın. - Yükleme bittikten sonra dosya sayısının doğru olduğunu kontrol edin. FTP kesilmesi sonucu eksik kalan dosyalar paylaşımlı ortamda en zor tespit edilen sorunlardan biridir.
PDO Bağlantı Yapılandırması
Dosyalar yüklendikten sonra projenin Hostinger’deki veritabanına bağlanması gerekir. PDO yapılandırmasını ayrı bir config.php dosyasında toplamak; hem güvenli hem de değişiklik yapması kolay bir yöntemdir. public_html dışına çıkarmanız mümkünse kök dizinin bir üstüne taşıyıp require ile çağırmak ek bir güvenlik katmanı sağlar.
<?php
// config.php — Hostinger paylaşımlı hosting örneği
$host = 'localhost';
$dbname = 'u123456789_app';
$user = 'u123456789_user';
$pass = 'GUCLU_SIFRE';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$dbname};charset={$charset}";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
error_log('DB connection error: ' . $e->getMessage());
http_response_code(500);
exit('Veritabanı bağlantısı kurulamadı.');
}
Bu yapılandırmada dikkat edilmesi gereken birkaç nokta vardır: ATTR_ERRMODE mutlaka ERRMODE_EXCEPTION olmalı; aksi hâlde hatalar sessizce yutulabilir. ATTR_EMULATE_PREPARES‘i false yapmak SQL injection’a karşı daha güçlü bir koruma sağlar. Şifreyi kaynak kodda bırakmak yerine .env kullanmak veya config.php‘yi public_html dışına taşımak ek bir güvenlik adımıdır.
Hata Ayıklama ve .htaccess Yapılandırması
Site açıldığında “500 Internal Server Error” alırsanız önce hata loglarını kontrol edin. hPanel’in hata günlüğü bölümü veya public_html içindeki error_log dosyası, kök nedeni hızlıca gösterir. PHP sürümü uyumsuzluğu, eksik bir uzantı veya yanlış .htaccess yönlendirmesi en yaygın nedenlerdir.
Temiz URL kullanan projeler için tipik bir .htaccess yapılandırması şu şekildedir:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
# Hata gösterimini canlıda kapat
php_flag display_errors off
# Statik dosyalar için tarayıcı cache
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
</IfModule>
Yaygın Hatalar ve Çözüm Adımları
Paylaşımlı hosting ortamında PHP PDO projelerinde tekrarlayan birkaç hata vardır. Aşağıdaki tablo, hata mesajını gördüğünüzde hangi tarafa bakmanız gerektiğini özetler.
| Hata | Olası Neden | Kontrol Edilecek Yer |
|---|---|---|
| SQLSTATE[HY000] [1045] Access denied | Yanlış kullanıcı adı, şifre veya yetki | hPanel veritabanı kullanıcı listesi |
| SQLSTATE[HY000] [1049] Unknown database | DB adı yanlış yazılmış | config.php içindeki dbname |
| 500 Internal Server Error | .htaccess yazım hatası veya PHP sürümü uyumsuzluğu | hPanel hata günlüğü, PHP sürümü ayarı |
| Boş beyaz sayfa | Açık olmayan hata raporlama + fatal error | error_log dosyası |
| Türkçe karakter bozulması | Tablo veya bağlantı charset uyumsuzluğu | Tablo collation + PDO charset |
Performans ve Güvenlik Kontrol Listesi
Yayına çıkmadan önce aşağıdaki maddeleri tek tek kontrol etmek, sonradan dönüp düzeltmek zorunda kalmamak için iyi bir yoldur.
- Veritabanı şifresi yeterince güçlü ve özel; başka projelerle ortak değil.
- Hata gösterimi canlıda kapalı, hatalar dosyaya loglanıyor.
- Tüm sorgular parametreli prepared statement kullanıyor; doğrudan string birleştirme yok.
- Dosya izinleri: klasörler 755, dosyalar 644. Yazma izni gereken upload klasörü dışında 777 verilmemiş.
- SSL sertifikası aktif ve site HTTPS yönlendirmesi yapıyor.
- config.php gibi hassas dosyalar doğrudan erişime kapalı (mümkünse
public_htmldışında). - PHP sürümü hPanel üzerinden projenin desteklediği güncel sürüme ayarlanmış.
- Tarayıcı önbelleği statik dosyalar için
.htaccessiçinden devreye alınmış. - İlk istek sonrası bağlantı süresi kabul edilebilir; uzunsa sorgu indeksleri kontrol edilmeli.
Sonuç
PHP PDO MySQL projesini Hostinger’e yüklemek; doğru sırada yapıldığında oldukça öngörülebilir bir süreçtir. Önce yerel projenin paylaşımlı ortama uyumlu hâle getirilmesi, ardından hPanel üzerinde veritabanı kurulumu, sonra dosyaların doğru klasöre yüklenmesi ve son olarak bağlantı yapılandırmasının hata yönetimiyle birlikte yazılması ana akışı oluşturur.
Bu yapı hem küçük tek dosyalık projeler hem de daha karmaşık çok katmanlı uygulamalar için temel iskelet olarak kullanılabilir. Bir sonraki adım olarak proje büyüdükçe Composer kullanımı, .env tabanlı konfigürasyon ve düzenli veritabanı yedekleme rutini eklemek mantıklı bir yol haritasıdır.
Sıkça Sorulan Sorular
1. Hostinger paylaşımlı pakette PDO uzantısı varsayılan açık mı?
Hostinger paylaşımlı planlarda pdo_mysql uzantısı genellikle varsayılan olarak etkindir. hPanel içindeki PHP Yapılandırması bölümünden hangi uzantıların açık olduğu kontrol edilebilir. Eğer could not find driver hatası alıyorsanız uzantı kapalı olabilir; aynı ekrandan açabilirsiniz.
2. Veritabanı bağlantısı için localhost mu yoksa özel bir sunucu adı mı yazmalıyım?
Çoğu Hostinger paylaşımlı planda localhost çalışır. Bazı planlarda hPanel’in veritabanı detay sayfasında “MySQL Hostname” alanında özel bir sunucu adı verilir; bu durumda PDO’da o değeri kullanmak gerekir. Önce panelde belirtilen değere bakmak, ardından kod yazmak en güvenli yoldur.
3. Büyük SQL dökümünü phpMyAdmin’e yükleyemiyorum, ne yapmalıyım?
phpMyAdmin’in dosya boyutu limiti aşıldığında SQL dosyasını parçalara bölmek, gzip ile sıkıştırılmış olarak yüklemek veya Hostinger SSH erişimi olan planlarda mysql -u kullanici -p veritabani < dosya.sql komutunu kullanmak işe yarar. Büyük tablolar varsa indeksleri içe aktarma sonrasında eklemek süreyi belirgin biçimde kısaltır.
4. Projeyi yükledim ama site beyaz sayfa veriyor. Nereye bakmalıyım?
Beyaz sayfa genellikle fatal error ve hata gösteriminin kapalı olmasının birleşiminden kaynaklanır. Öncelikle hPanel’in hata günlüğü bölümü veya public_html içindeki error_log dosyası incelenmelidir. Geliştirme aşamasında geçici olarak ini_set('display_errors', 1) ile mesajları görmek, sorunu bulmayı hızlandırır. Sorun çözüldükten sonra bu satır kaldırılmalıdır.
5. config.php dosyasını public_html dışına taşımak şart mı?
Şart değildir, ancak güvenlik açısından önerilir. public_html dışına taşıdığınız bir konfigürasyon dosyası tarayıcı üzerinden doğrudan erişilemez hâle gelir. Bu mümkün değilse dosyayı içeride bırakıp .htaccess ile erişimi engellemek de uygulanabilir bir alternatiftir.
Bir Cevap Yaz
E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.