PHP'de "Başlıklar zaten gönderildi" hatası nasıl düzeltilir
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
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
<?php
veya sonra boşluk?>
- UTF-8 bayt sırası işareti özel olarak
- Önceki hata mesajları veya bildirimler
- Önce
Kasıtlı:
print
,echo
Ve diğer fonksiyonları üretim çıkışı- Ham
<html>
bölümler önceki<?php
kod.
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.php
ve satır52
. Erken çıktı aramanız gereken yer burasıydı.
Tipik nedenler:
Yazdır, yankı
print
Veecho
ifadelerinden 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.Ham HTML alanları
Bir
.php
dosyadaki 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.
<?php
"Script.php 1. satır " uyarıları için önceki boşlukUyarı satırdaki çıktıya atıfta
1
bulunuyorsa, ç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.
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.
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 . (Genellikleinclude()d
suçlu senaryolardır.)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
gzip
akış kodlama ayarı veyaob_gzhandler . - Ancak
extension=
, örtülü bir PHP başlatma / uyarı mesajı üreten, çift yüklenmiş herhangi bir modül de olabilir .
- Bazen
Ö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_reporting
veya display_errors
devre 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.
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.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>
etiketiUygulamanı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.
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 ListesiniEF BB BF
dosyaları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.
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.
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.
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.
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, include
diğ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;
Bu satırdan dolayı:
printf ("Hi %s,</br />", $name);
Sen olmamalı / yankı baskı başlıkları göndermeden önce bir şey.
Basit bir ipucu: Senaryonuzda ilk <?php
etiketin 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;)
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
omitted
içeren dosyalardan OLMALIDIRonly php
İnanın bana, bu standartlara uymak sizi hayatınızdan çok fazla saat kurtarabilir :)
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.
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