PHP'de "Başlıklar zaten gönderildi" hatası nasıl düzeltilir

Nov 07 2011

Komut dosyamı çalıştırırken, bunun gibi birkaç hata alıyorum:

Uyarı: başlık bilgilerini değiştirilemiyor - zaten (gönderdiği başlıkları /some/file.php:12 başlayan çıktı olarak) /some/file.php üzerinde hat 23

Hata mesajlarında belirtilen hatlar header()ve setcookie()çağrıları içerir .

Bunun nedeni ne olabilir? Ve nasıl düzeltilir?

Yanıtlar

3066 mario Nov 07 2011 at 00:45

Başlıkları göndermeden önce çıktı yok!

HTTP üstbilgilerini gönderen / değiştiren işlevler, herhangi bir çıktı alınmadan önce çağrılmalıdır . summary ⇊Aksi takdirde arama başarısız olur:

Uyarı: Üstbilgi bilgileri değiştirilemez - başlıklar zaten gönderildi (çıktı komut dosyasında başlatıldı : satır )

HTTP başlığını değiştiren bazı işlevler şunlardır:

  • header / header_remove
  • session_start / session_regenerate_id
  • setcookie / setrawcookie

Çıktı şunlar olabilir:

  • Kasıtsız:

    • Önce <?phpveya sonra boşluk?>
    • UTF-8 bayt sırası işareti özel olarak
    • Önceki hata mesajları veya bildirimler
  • Kasıtlı:

    • print, echoVe diğer fonksiyonları üretim çıkışı
    • Ham <html>bölümler önceki <?phpkod.

Neden olur?

Başlıkların neden çıktıdan önce gönderilmesi gerektiğini anlamak için tipik bir HTTP yanıtına bakmak gerekir . PHP betikleri esas olarak HTML içeriği üretir, ancak aynı zamanda bir dizi HTTP / CGI üstbilgisini web sunucusuna iletir:

HTTP/1.1 200 OK
Powered-By: PHP/5.3.7
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8

<html><head><title>PHP page output page</title></head>
<body><h1>Content</h1> <p>Some more output follows...</p>
and <a href="/"> <img src=internal-icon-delayed> </a>

Sayfa / çıktı her zaman başlıkları takip eder. PHP, başlıkları önce web sunucusuna iletmelidir. Bunu yalnızca bir kez yapabilir. Çifte satır kırıldıktan sonra onları asla değiştiremez.

PHP ilk çıkışını aldığında ( print, echo, <html>) o olacaktır temizlemek tüm toplanan başlıklarını. Daha sonra istediği tüm çıktıları gönderebilir. Ancak daha fazla HTTP üstbilgisi göndermek imkansızdır.

Erken çıkışın nerede oluştuğunu nasıl öğrenebilirsiniz?

header()Uyarı sorun nedenini bulmak için tüm ilgili bilgileri içerir:

Uyarı: Üstbilgi bilgileri değiştirilemez - üstbilgiler (çıktı / www / usr2345 / htdocs / auth.php : 52 adresinde başlatıldı ) /www/usr2345/htdocs/index.php satırda 100.

Burada "satır 100" header() çağrının başarısız olduğu komut dosyasını ifade eder .

Parantez içindeki " çıktı başladı " notu daha önemlidir. Önceki çıktının kaynağını ifade eder. Bu örnekte bu auth.phpve satır52 . Erken çıktı aramanız gereken yer burasıydı.

Tipik nedenler:

  1. Yazdır, yankı

    printVe echoifadelerinden kasıtlı çıktı, HTTP üstbilgileri gönderme fırsatını sonlandıracaktır. Bunu önlemek için uygulama akışı yeniden yapılandırılmalıdır. İşlevleri ve şablon oluşturma şemalarını kullanın . Mesajlar yazılmadan önceheader() aramaların gerçekleştiğinden emin olun .

    Çıktı üreten işlevler şunları içerir:

    • print, echo, printf,vprintf
    • trigger_error, ob_flush, ob_end_flush, var_dump,print_r
    • readfile, passthru, flush, imagepng,imagejpeg


    diğerleri arasında ve kullanıcı tanımlı işlevler.

  2. Ham HTML alanları

    Bir .phpdosyadaki ayrıştırılmamış HTML bölümleri de doğrudan çıktıdır. Bir tetikleyecek Senaryo koşulları header()çağrıyı önce belirtmek gerekir herhangi ham <html>bloklar.

    <!DOCTYPE html>
    <?php
        // Too late for headers already.
    

    İşlemeyi çıktı mantığından ayırmak için bir şablon oluşturma şeması kullanın.

    • Form işleme kodunu komut dosyalarının üstüne yerleştirin.
    • Mesajları ertelemek için geçici dize değişkenleri kullanın.
    • Gerçek çıktı mantığı ve karıştırılmış HTML çıktısı sondan sonra gelmelidir.

  3. <?php"Script.php 1. satır " uyarıları için önceki boşluk

    Uyarı satırdaki çıktıya atıfta 1bulunuyorsa, çoğunlukla açılış belirtecinden önce boşluk , metin veya HTML'nin başında yer alır <?php.

     <?php
    # There's a SINGLE space/newline before <? - Which already seals it.
    

    Benzer şekilde, eklenen komut dosyaları veya komut dosyası bölümleri için de gerçekleşebilir:

    ?>
    
    <?php
    

    PHP, kapanış etiketlerinin ardından tek bir satır sonu tüketir. Ancak, bu tür boşluklara kaydırılmış birden çok yeni satırı veya sekmeyi veya boşlukları telafi etmeyecektir.

  4. UTF-8 BOM

    Satır kesmeleri ve boşluklar tek başına sorun olabilir. Ancak buna neden olabilecek "görünmez" karakter dizileri de vardır. En ünlüsü, çoğu metin editörü tarafından görüntülenmeyen UTF-8 BOM (Byte-Order-Mark) . Bu EF BB BF, UTF-8 kodlu belgeler için isteğe bağlı ve yedek olan bayt dizisidir . Ancak PHP, bunu ham çıktı olarak ele almak zorundadır. Çıktıdaki karakterler (istemci belgeyi Latin-1 olarak yorumlarsa) veya benzer "anlamsız" olarak görünebilir .

    Özellikle grafik editörler ve Java tabanlı IDE'ler onun varlığından habersizdir. Görselleştirmezler (Unicode standardı tarafından zorunlu kılınmıştır). Ancak çoğu programcı ve konsol düzenleyicisi şunları yapar:

    Orada sorunu erkenden fark etmek kolaydır. Diğer editörler bir dosya / ayarlar menüsünde varlığını tanımlayabilir (Windows'ta Notepad ++ sorunu tanımlayabilir ve çözebilir ), Malzeme Listelerinin varlığını incelemenin bir başka seçeneği de bir hexeditor'a başvurmaktır . On * nix sistemleri hexdump, bunları ve diğer sorunları denetlemeyi basitleştiren bir grafik varyant değilse de genellikle mevcuttur:

    Kolay bir düzeltme, metin düzenleyiciyi dosyaları "UTF-8 (BOM yok)" veya benzeri bir terminoloji olarak kaydedecek şekilde ayarlamaktır. Genellikle yeni gelenler yeni dosyalar oluşturmaya başvurur ve yalnızca önceki kodu kopyalayıp yapıştırır.

    Düzeltme araçları

    Metin dosyalarını ( sed/awk veya recode) incelemek ve yeniden yazmak için otomatik araçlar da vardır . PHP için özellikle bir phptagsetiket daha var . Yakın ve açık etiketleri uzun ve kısa formlarda yeniden yazar, ancak baştaki ve sondaki boşluk, Unicode ve UTF-x BOM sorunlarını da kolayca düzeltir:

    phptags  --whitespace  *.php
    

    Tüm içerme veya proje dizininde kullanmak mantıklıdır.

  5. Sonrasındaki boşluk ?>

    Hata kaynağından kapanışın?> arkasında bahsediliyorsa, bu, bazı boşlukların veya ham metnin yazıldığı yerdir. PHP bitiş işaretçisi bu noktada betik yürütmeyi sonlandırmaz. Bundan sonraki herhangi bir metin / boşluk karakteri hala sayfa içeriği olarak yazılacaktır.

    Yaygın olarak, özellikle yeni gelenlere, takip eden ?>PHP kapatma etiketlerinin atlanması önerilir . Bu , bu vakaların küçük bir kısmından kaçınır . (Genellikle include()dsuçlu senaryolardır.)

  6. Hata kaynağı "Satır 0'da Bilinmeyen" olarak belirtildi

    Hata kaynağı somutlaştırılmamışsa, genellikle bir PHP uzantısı veya php.ini ayarıdır.

    • Bazen gzipakış kodlama ayarı veyaob_gzhandler .
    • Ancak extension=, örtülü bir PHP başlatma / uyarı mesajı üreten, çift ​​yüklenmiş herhangi bir modül de olabilir .

  7. Önceki hata mesajları

    Başka bir PHP ifadesi veya ifadesi bir uyarı mesajının veya bildiriminin yazdırılmasına neden olursa, bu da erken çıktı olarak sayılır.

    Bu durumda, hatadan kaçınmanız, ifadenin yürütülmesini geciktirmeniz veya mesajı örn. isset()Veya ile @()- daha sonra hata ayıklamayı engellemediğinde - bastırmanız gerekir .

Hata mesajı yok

Başına sahipseniz error_reportingveya display_errorsdevre dışı bıraktıysanız php.ini, hiçbir uyarı görünmez. Ancak hataları görmezden gelmek sorunu ortadan kaldırmaz. Erken çıktıdan sonra başlıklar hala gönderilemez.

Bu nedenle, header("Location: ...")yönlendirmeler sessizce başarısız olduğunda , uyarıları araştırmanız çok tavsiye edilir. Bunları çağrı betiğinin üzerinde iki basit komutla yeniden etkinleştirin:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Ya set_error_handler("var_dump");da her şey başarısız olursa.

Yönlendirme başlıklarından bahsetmişken, son kod yolları için genellikle böyle bir deyim kullanmalısınız:

exit(header("Location: /finished.html"));

Tercihen, header()arıza durumunda bir kullanıcı mesajı yazdıran bir yardımcı program işlevi bile .

Geçici çözüm olarak çıktı tamponlama

PHP çıktı arabelleği , bu sorunu hafifletmek için bir çözümdür . Genellikle güvenilir bir şekilde çalışır, ancak uygun uygulama yapılandırmasının ve çıktıyı kontrol mantığından ayırmanın yerini almamalıdır. Asıl amacı, web sunucusuna toplu aktarımları en aza indirmektir.

  1. output_buffering=Ayar yine yardımcı olabilir. Modern FPM / FastCGI kurulumlarında php.ini veya .htaccess veya hatta .user.ini aracılığıyla yapılandırın .
    Etkinleştirmek, PHP'nin çıktıyı anında web sunucusuna iletmek yerine arabelleğe almasına izin verecektir. Böylece PHP, HTTP başlıklarını toplayabilir.

  2. Aynı şekilde ob_start();çağrı betiğinin üstüne bir çağrı ile meşgul olabilir . Bununla birlikte, birçok nedenden dolayı daha az güvenilirdir:

    • <?php ob_start(); ?>İlk komut dosyasını başlatsa bile , beyaz boşluk veya bir malzeme listesi daha önce karıştırılarak etkisiz hale getirilebilir .

    • HTML çıktısı için boşlukları gizleyebilir. Ancak, uygulama mantığı ikili içerik (örneğin oluşturulmuş bir görüntü) göndermeye çalışır çalışmaz, arabelleğe alınmış yabancı çıktı bir sorun haline gelir. (Daha ileri bir ob_clean()çözüm olarak gerekli.)

    • Arabellek boyutu sınırlıdır ve varsayılan değerlere bırakıldığında kolayca taşabilir. Ve bu da nadir bir durum değil, gerçekleştiğinde izini sürmek zor .

Bu nedenle her iki yaklaşım da güvenilmez hale gelebilir - özellikle geliştirme kurulumları ve / veya üretim sunucuları arasında geçiş yaparken. Bu nedenle çıktı arabelleği, yaygın olarak sadece bir koltuk değneği / kesinlikle bir geçici çözüm olarak kabul edilir.

Ayrıca kılavuzdaki temel kullanım örneğine ve daha fazla artı ve eksiye bakın:

  • Çıktı tamponlaması nedir?
  • PHP'de neden çıktı tamponlaması kullanılıyor?
  • Çıktı tamponlamasının kullanılması kötü bir uygulama olarak kabul edilir mi?
  • "Zaten gönderilmiş üstbilgiler" için doğru çözüm olarak çıktı tamponlama için durumu kullanın

Ama diğer sunucuda çalıştı !?

Başlıklar uyarısını daha önce almadıysanız, çıktı tamponlama php.ini ayarı değişmiştir. Muhtemelen mevcut / yeni sunucuda yapılandırılmamış.

İle kontrol ediliyor headers_sent()

headers_sent()Başlıklar göndermek hala mümkünse ... araştırmak için her zaman kullanabilirsiniz . Bu, bir bilgiyi koşullu olarak yazdırmak veya başka bir geri dönüş mantığını uygulamak için kullanışlıdır.

if (headers_sent()) {
    die("Redirect failed. Please click on this link: <a href=...>");
}
else{
    exit(header("Location: /user.php"));
}

Faydalı geri dönüş geçici çözümleri şunlardır:

  • HTML <meta>etiketi

    Uygulamanızı düzeltmek yapısal olarak zorsa, yönlendirmelere izin vermenin kolay (ancak bir şekilde profesyonel olmayan) yolu bir HTML <meta>etiketi enjekte etmektir . Bir yönlendirme şununla sağlanabilir:

     <meta http-equiv="Location" content="http://example.com/">
    

    Veya kısa bir gecikmeyle:

     <meta http-equiv="Refresh" content="2; url=../target.html">
    

    Bu, <head>bölümden sonra kullanıldığında geçersiz HTML'ye yol açar . Çoğu tarayıcı hala kabul ediyor.

  • JavaScript yönlendirmesi

    Alternatif olarak, sayfa yönlendirmeleri için bir JavaScript yönlendirmesi kullanılabilir:

     <script> location.replace("target.html"); </script>
    

    Bu genellikle <meta>geçici çözümden daha HTML uyumlu olsa da, JavaScript özellikli istemcilere güvenir.

Ancak her iki yaklaşım da, gerçek HTTP header () çağrıları başarısız olduğunda kabul edilebilir geri dönüşler yapar. İdeal olarak, bunu her zaman son çare olarak kullanıcı dostu bir mesaj ve tıklanabilir bir bağlantıyla birleştirirsiniz. (Örneğin http_redirect () PECL uzantısının yaptığı şey budur.)

Neden setcookie()ve session_start()ayrıca etkileniyor

Her ikisi de setcookie()ve session_start()bir Set-Cookie:HTTP başlığı göndermesi gerekiyor . Aynı koşullar bu nedenle geçerlidir ve erken çıktı durumları için benzer hata mesajları üretilecektir.

(Elbette, tarayıcıdaki devre dışı bırakılmış çerezlerden ve hatta proxy sorunlarından da etkilenirler. Oturum işlevselliği açık bir şekilde boş disk alanına ve diğer php.ini ayarlarına, vb. Bağlıdır.)

Diğer bağlantılar

  • Google, benzer tartışmaların uzun bir listesini sağlar .
  • Ve elbette Stack Overflow'da birçok özel durum da ele alındı.
  • Wordpress SSS zaten gönderilmiş olan Başlıklardaki uyarı problemini nasıl çözebilirim? genel bir şekilde.
  • Adobe Topluluğu: PHP geliştirme: yönlendirmeler neden çalışmıyor (başlıklar zaten gönderilmiş)
  • Nucleus SSS: "Zaten gönderilen sayfa başlıkları" ne anlama geliyor?
  • Daha kapsamlı açıklamalardan biri HTTP Üstbilgileri ve PHP başlığı () İşlev - NicholasSolutions tarafından hazırlanan bir eğitimdir (İnternet Arşiv bağlantısı). HTTP'yi ayrıntılı olarak ele alır ve komut dosyalarını yeniden yazmak için birkaç yönerge verir.
203 phihag Nov 07 2011 at 00:44

Bu hata mesajı, siz HTTP başlıklarını ( veya ile ) göndermeden önce herhangi bir şey gönderildiğinde tetiklenir . HTTP üstbilgilerinden önce bir şey çıktılamanın yaygın nedenleri şunlardır:setcookieheader

  • Genellikle dosyaların başında veya sonunda yanlışlıkla beyaz boşluk, şöyle:

     <?php
    // Note the space before "<?php"
    ?>
    

       Bundan kaçınmak için, kapatmayı bırakmanız yeterlidir ?>- zaten gerekli değildir.

  • Bir php dosyasının başında bayt sırası işaretler . Durumun bu olup olmadığını anlamak için php dosyalarınızı bir hex editörü ile inceleyin. Baytlarla başlamalılar 3F 3C. Malzeme Listesini EF BB BFdosyaların başlangıcından güvenle kaldırabilirsiniz .
  • Bu tür aramaları için Açık çıkış echo, printf, readfile, passthru, kod önce <?vs.
  • display_errorsPhp.ini özelliği ayarlanmışsa , php tarafından verilen bir uyarı . Bir programcı hatası üzerine çökmek yerine, php sessizce hatayı düzeltir ve bir uyarı verir. display_errorsVeya hata raporlama yapılandırmalarını değiştirebilseniz de , sorunu çözmeyi tercih etmelisiniz.
    Yaygın nedenler, bir dizinin tanımsız öğelerine erişim ( girişin ayarlanıp ayarlanmadığını $_POST['input']kullanmak emptyveya issettest etmek gibi) veya bir dize değişmezi yerine tanımsız bir sabit kullanmaktır (olduğu gibi $_POST[input], eksik tırnaklara dikkat edin).

Açılması çıktı ara bellek problemi ortadan gerekir; çağrıldıktan sonraki tüm çıktılar ob_start, siz tamponu serbest bırakana kadar, örn. ile arabelleğe alınır ob_end_flush.

Bununla birlikte, çıktı tamponlama sorunları ortadan kaldırırken, uygulamanızın neden HTTP başlığından önce bir HTTP gövdesi çıktısı verdiğini gerçekten belirlemelisiniz. Bu, arayan kişiye yanlış numarayı aldığını söylemeden önce bir telefon görüşmesi yapmak ve gününüzü ve hava durumunu tartışmak gibi olur.

126 ManishShrivastava Aug 01 2012 at 13:43

Bu hatayı daha önce birçok kez aldım ve tüm PHP programcılarının bu hatayı en az bir kez aldığından eminim.

Olası Çözüm 1

Bu hata boş boşluklarla neden olmuş olabilir önce dosyanın başlangıcından veya sonrasında file.These boş alanların sonu burada olmamalı.

örn) BURADA BOŞ YER OLMAMALIDIR

   echo "your code here";

?>
THERE SHOULD BE NO BLANK SPACES HERE

Bu hataya neden olan dosyayla ilişkili tüm dosyaları kontrol edin.

Not: Bazen gedit (varsayılan bir linux editörü) gibi EDITOR (IDE), kaydedilen dosyaya bir boş satır ekler. Bu olmamalı. Linux kullanıyorsanız. Sayfa sonundaki?> sonrasındaki boşlukları / satırları kaldırmak için VI editörünü kullanabilirsiniz.

Olası Çözüm 2: Eğer durumunuz bu değilse, arabelleğe almak için ob_start kullanın:

<?php
  ob_start();

  // code 

 ob_end_flush();
?> 

Bu, çıktı arabelleğini etkinleştirecek ve başlıklarınız sayfa arabelleğe alındıktan sonra oluşturulacaktır.

90 IpsitaRout Mar 24 2013 at 19:54

Aşağıdaki satır yerine

//header("Location:".ADMIN_URL."/index.php");

yazmak

echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");

veya

?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php

Sorununuzu kesinlikle çözecektir. Aynı problemle karşılaştım ama yukarıdaki şekilde başlık konumunu yazarak çözdüm.

41 SethCarnegie Nov 07 2011 at 00:45

Yapmalısın

printf ("Hi %s,</br />", $name);

izin verilmeyen çerezleri ayarlamadan önce. Başlıklardan önce herhangi bir çıktı gönderemezsiniz, boş bir satır bile.

34 T.Todua Apr 10 2015 at 02:22

YAYGIN SORUNLAR:

( kaynağından kopyalandı: kaynak )

====================

1) komuttan echo..önce herhangi bir çıktı (yani HTML kodları) olmamalıdır header(.......);.

2) etiketlerden önceki ve sonraki beyaz boşlukları (veya yeni satırı ) kaldırın .<?php?>

3) ALTIN ​​KURAL! - o php dosyasının (ve ayrıca, includediğer dosyalarınızda) BOM kodlaması olmayan (ve sadece UTF-8 değil ) UTF8'e sahip olup olmadığını kontrol edin . Çoğu durumda bu problemdir (çünkü UTF8 kodlu dosya php dosyasının başlangıcında metin düzenleyicinizin göstermediği özel bir karaktere sahiptir) !!!!!!!!!!!

4) sonra header(...);kullanmanız gerekirexit;

5) her zaman 301 veya 302 referansını kullanın:

header("location: http://example.com",  true,  301 );  exit;

6) Hata raporlamayı açın ve hatayı bulun. Hatanız çalışmayan bir işlevden kaynaklanıyor olabilir. Hata raporlamayı açtığınızda, her zaman önce en çok görülen hatayı düzeltmelisiniz. Örneğin, "Uyarı: date_default_timezone_get (): Sistemin saat dilimi ayarlarına güvenmek güvenli değildir" olabilir. - daha sonra aşağı doğru "başlıklar gönderilmedi" hatası görebilirsiniz. En çok görülen (1.) hatayı düzelttikten sonra sayfanızı yeniden yükleyin. Hala hatalarınız varsa, en çok karşılaşılan hatayı tekrar düzeltin.

7) Yukarıdakilerin hiçbiri yardımcı olmazsa, JAVSCRIPT yeniden yönlendirmeyi kullanın (ancak, kesinlikle önerilmeyen yöntem), özel durumlarda son şans olabilir ...:

echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
33 Sarfraz Nov 07 2011 at 00:45

Bu satırdan dolayı:

printf ("Hi %s,</br />", $name);

Sen olmamalı / yankı baskı başlıkları göndermeden önce bir şey.

27 Sliq May 17 2012 at 03:37

Basit bir ipucu: Senaryonuzda ilk <?phpetiketin hemen önünde yer alan basit bir boşluk (veya görünmez özel karakter) buna neden olabilir! Özellikle bir takımda çalışıyorsanız ve birisi "zayıf" bir IDE kullanıyorsa veya dosyaları garip metin düzenleyicilerle karıştırdığında.

Bunları gördüm;)

22 MD.SahibBinMahboob Nov 08 2013 at 08:29

Başka bir kötü uygulama, henüz belirtilmeyen bu sorunu ortaya çıkarabilir.

Bu kod parçacığına bakın:

<?php
include('a_important_file.php'); //really really really bad practise
header("Location:A location");
?>

Her şey yolunda değil mi?

Ya "a_important_file.php" bu ise:

<?php
//some php code 
//another line of php code
//no line above is generating any output
?>

 ----------This is the end of the an_important_file-------------------

Bu işe yaramayacak mı? Neden çünkü zaten yeni bir hat oluşturuldu.

Şimdi, bu yaygın bir senaryo olmasa da, denetleyicinize bir şeyler teslim etmeden önce çok sayıda dosya yükleyen bir MVC çerçevesi kullanıyorsanız ne olur? Bu alışılmadık bir senaryo değil. Buna hazırlıklı olun.

Gönderen PSR-2 2.2:


  • Tüm PHP dosyalarının Unix LF (linefeed) line ending.
  • Tüm PHP dosyalarının bir single blank line.
  • ?> Kapanış etiketi omittediçeren dosyalardan OLMALIDIRonly php

İnanın bana, bu standartlara uymak sizi hayatınızdan çok fazla saat kurtarabilir :)

16 Lupin May 22 2015 at 03:39

Bazen dev işleminde hem WIN iş istasyonları hem de LINUX sistemleri (barındırma) olduğunda ve kodda ilgili satırdan önce herhangi bir çıktı görmezseniz, dosyanın biçimlendirilmesi ve Unix LF (satır besleme) satır sonunun olmaması olabilir. .

Bunu hızlı bir şekilde düzeltmek için genellikle yaptığımız şey, dosyayı yeniden adlandırmak ve LINUX sisteminde yeniden adlandırılmış dosya yerine yeni bir dosya oluşturmak ve ardından içeriği buna kopyalamaktır. Bu, çoğu zaman sorunu çözer, çünkü WIN'de oluşturulan bazı dosyalar bir kez barındırmaya taşındığında bu soruna neden olur.

Bu düzeltme, FTP ile yönettiğimiz siteler için kolay bir düzeltmedir ve bazen yeni ekip üyelerimize biraz zaman kazandırabilir.

3 BiswadeepSarkar Feb 03 2015 at 11:50

Genellikle bu hata, yankılamadan veya yazdırdıktan sonra başlık gönderdiğimizde ortaya çıkar. Bu hata belirli bir sayfada ortaya çıkarsa, arama yapmadan önce sayfanın herhangi bir şeyi yansıtmadığından emin olun start_session().

Öngörülemeyen Hata Örneği:

 <?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();

//your page content

Bir örnek daha:

<?php
includes 'functions.php';
?> <!-- This new line will also arise error -->
<?php
session_start();
session_regenerate_id();

//your page content

Sonuç: Çağırmadan önce herhangi bir karakter çıktılamayın session_start()veya header()beyaz boşluk veya yeni satır bile işlev görmeyin