PHP Header Fonksiyonu Çalışmıyor
Herkese merhaba xampp üzerinden çalışıyorum normalde yazılımı bitirdim cpanel kullandığım sunucuma yükledim fakat header("location:index.php");
header fonksiyonum çalışmıyor xampp üzerinde hiç bir sorun yok ama bazı serverlarda böyle yapıyor ob_start ve session_start mevcut çünkü üyelik sistemli
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (9)
Selamlar,
Header fonksiyonu genellikle çalışır, ancak bazı durumlarda çalışmamasına neden olabilecek bazı sebepler olabilir. İlk olarak, eğer header fonksiyonu çağrıldıktan sonra sayfanın HTML çıktısı oluşturulmuşsa (örneğin, ekrana çıktı göndermeyi içeren bir echo veya print ifadesi kullanılmışsa), header fonksiyonu çalışmayacaktır. Bu nedenle, header fonksiyonu çağrıldıktan hemen önce ob_start fonksiyonunu çağırmayı deneyin.
header() fonksiyonunun çalışmamasının nedeni, önceden yazdığınız bir yazı çıktısı olabilir. Örneğin, ekrana bir hata mesajı yazdıysanız veya bir form doldurarak sayfaya bir veri göndermişseniz, header() fonksiyonunun çalışmamasına neden olabilir. Bu durumda, header() fonksiyonunu ob_start() ve session_start() fonksiyonlarını çalıştırdıktan sonra çağırmanız gerekir.
Bu fonksiyonunun çalışmamasının nedeni, genellikle ob_start() ve session_start() fonksiyonlarının çalıştırılmamasıdır. Bu fonksiyonlar, HTTP yanıtının üst kısmını (header) değiştirebilmek için kullanılır. Özellikle ob_start() fonksiyonu, yanıtın üst kısmını değiştirilebilir hale getirir ve bu nedenle header() fonksiyonunun çalışmasını sağlar.
Bunun yanı sıra, fonksiyonunun çalışmamasının nedeni, PHP ayarlarının yanlış yapılandırılmış olması da olabilir. Bu durumda, PHP yapılandırma dosyası olan "php.ini" dosyasını düzenleyerek problemi çözebilirsiniz.
Ayrıca, bazı sunucular header fonksiyonunu çalıştırmak için session_start fonksiyonunu çağırmak zorunda olabilir. Bu nedenle, header fonksiyonunu çalıştırmadan önce session_start fonksiyonunu da çağırmayı deneyin.
Son olarak, fonksiyonunun çalışmamasına neden olabilecek bir diğer sebep de .htaccess dosyasında yapılan bir yönlendirme olabilir. Eğer bu dosyada bir yönlendirme yapılmışsa, header fonksiyonu çalışmayabilir. Bu nedenle .htaccess dosyasını kontrol edin ve gerekli değişiklikleri yapın.
Umarım bu bilgiler yardımcı olmuştur. Eğer sorununuz hala çözülmemişse, lütfen sorununuzla ilgili daha fazla bilgi verin, size daha fazla yardımcı olabilmem için daha fazla detaya ihtiyacım var!
Eğer yönlendirme işlemini ajax işlemlerinin olduğu sayfada yaparsan header çalışmayacaktır.
Eğer öyleyse :
Ajax sayfanda $yonlendirme = false; adında bir değişken oluştur sayfanın başında olsun.
Yönlendirme geren bir durumda da $yonlendirme = true; olarak değiştir.
js tarafında response ettiğin veride
if(obj.yonlendirme){
//yönlendirme linkini burada belirleyip yönlendirebilirsin
//yada ajax sayfanda yonlendirme değişkenine atayıp burada kullanabilirsin.
}
Kodu ben buradan manuel yazdım orjinal kodda yazım yanlışı yok ve maalesef Location'u büyük yazmama rağmen çalışmadı
error_reporting(0); bu kodu localda kullanmanızı önermiyorum, ciddi hatalar ola bilir ve siz bunu göremeye bilirsiniz, global sunucuya aktardığınızda yeniden yazarsınız.
Ob_start() fonksiyonunu session_start() dan önce yazmanız daha doğru ola bilir. header("location:login"); kodu zaten yönlendirme
yapacağı için ondan sonrakı kodlar çalışmayacaktır. exit() kullanmanıza gerek yoktur. Hatanız ise index.phpde dir.
if (empty($_SESSION['kullanici_giris']) {
header("location:login");
exit;
}
bu kodda empty ( kapanmamış. doğru kod aşağıdakı gibidir.
if (empty($_SESSION['kullanici_giris'])) {
header("location:login");
}
index.php:
include 'inc/db.php';
if (empty($_SESSION['kullanici_giris']) {
header("location:login");
exit;
}
db.php:
session_start();
ob_start();
error_reporting(0);
date_default_timezone_set('Europe/Istanbul');
try
{
$db = new PDO("mysql:host=localhost;dbname=db_adi;charset=utf8",'db_kullanici','db_sifre');
//echo "Veritabanı Bağlantısı Başarılı.";
}
catch (PDOExpception $e)
{
echo $e->getMessage();
}