Jak naprawić błąd "Headers already sent" w PHP

Odpowiedzi na to pytanie są wysiłkiem społeczności. Edytuj istniejące odpowiedzi, aby poprawić ten post. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.

Podczas uruchamiania skryptu dostaję kilka błędów, takich jak to:

Warning: Cannot modify header information - nagłówki już wysłane przez (output started at /some / file.php:12) w / some / file.php on line 23

Linie wymienione w komunikatach o błędach zawierają header() oraz setcookie() telefony.

Jaki może być tego powód? I jak to naprawić?

 831
Author: Moses89, 2011-11-06

11 answers

Brak wyjścia przed wysłaniem nagłówków!

Należy wywoływać funkcje wysyłające/modyfikujące nagłówki HTTP przed wykonaniem jakiegokolwiek wyjścia. podsumowanie ⇊ W przeciwnym razie wywołanie nie powiedzie się:

Warning: Cannot modify header information - headers already sent (output started at script: line )

Niektóre funkcje modyfikujące nagłówek HTTP to:

Wyjście może być:

    • print, echo i innych funkcji wytwarzających wyjście
    • Raw <html> sections prior <?php code.
Dlaczego tak się dzieje?

Aby zrozumieć, dlaczego nagłówki muszą być wysyłane przed wyjściem, konieczne jest aby spojrzeć na typowy HTTP odpowiedź. Skrypty PHP generują głównie zawartość HTML, ale także przekazują zestaw nagłówków HTTP / CGI do webserver:

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>

Strona / wyjście zawsze podąża za nagłówkami. PHP musi zdać najpierw nagłówki do serwera www. Może to zrobić tylko raz. Po double linebreak nie może już ich zmienić.

Gdy PHP otrzyma pierwsze wyjście (print, echo, <html>) będzie flush {[95] } wszystkie zebrane nagłówki. Następnie może wysłać wszystkie dane wyjściowe chce. Ale wysyłanie kolejnych nagłówków HTTP jest wtedy niemożliwe.

Jak można dowiedzieć się, gdzie nastąpił przedwczesny wynik?

Ostrzeżenie zawiera wszystkie istotne informacje dotyczące znajdź przyczynę problemu:

Warning: Cannot modify header information - nagłówki już wysłane przez (wyjście rozpoczęte w /www / usr2345/htdocs / auth.php: 52 ) w / www / usr2345 / htdocs / index.php on line 100

Tutaj "linia 100" odnosi się do skryptu, w którym header() wywołanie nie powiodło się.

The "output started w " uwaga w nawiasie jest bardziej znacząca. Określa źródło poprzedniego wyjścia. W tym przykładzie jest to auth.php i linia 52. Tam trzeba było szukać przedwczesnych wyników.

typowe przyczyny:

  1. Drukuj, echo

    Intencjonalne wyjście ze instrukcji print i echo zakończy się możliwość wysyłania nagłówków HTTP. Przepływ aplikacji musi być zrestrukturyzowane, aby tego uniknąć. Użycie funkcje i schematów szablonów. Upewnij się, że header() wywołania występują przed wiadomościami są wypisane.

    Funkcje, które wytwarzają wyjście obejmują

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


    między innymi i funkcji zdefiniowanych przez użytkownika.

  2. Surowe obszary HTML

    Nieparowane sekcje HTML w .php plik jest również bezpośrednim wyjściem. Należy odnotować warunki skryptu, które wywołają wywołanie header() przed dowolnymi surowymi <html> blokami.

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

    Użyj schematu szablonów, aby oddzielić przetwarzanie od logiki wyjściowej.

    • umieść kod przetwarzania formularzy na szczycie skryptów.
    • użyj tymczasowych zmiennych łańcuchowych do odroczenia wiadomości.
    • rzeczywista logika wyjściowa i wymieszane wyjście HTML powinny następować ostatni.

  3. SPACJA przed <?php Dla " script.php line 1 " warnings

    Jeśli ostrzeżenie odnosi się do wyjścia w linii 1, wtedy to głównie początek whitespace , tekst lub HTML przed otwarciem tokena <?php.

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

    Podobnie może wystąpić dla dołączonych skryptów lub sekcji skryptów:

    ?>
    
    <?php
    

    PHP faktycznie zjada pojedynczy linebreak po zamknięciu tagów. Ale nie będzie wyrównać wiele nowych linii, tabulatorów lub spacji przesuniętych w takie luki.

  4. UTF-8 BOM

    Same przerwy w Linebreaks i spacje mogą być problemem. Ale są też " niewidzialne" sekwencje znaków, które mogą to spowodować. Najbardziej znany z UTF-8 BOM (Byte-Order-Mark) który nie jest wyświetlany przez większość edytorów tekstu. Jest to sekwencja bajtowa EF BB BF, która jest opcjonalny i nadmiarowy dla dokumentów zakodowanych w UTF-8. PHP musi jednak traktować to jako surowe wyjście. Może się pojawić jako znaki  w wyjściu (jeśli klient interpretuje dokument jako Latin-1) lub podobne "śmieci".

    W szczególności edytory graficzne i IDE oparte na Javie są nieświadome jego obecność. Nie wizualizują go (zgodnie ze standardem Unicode). Większość programistów i edytorów konsolowych jednak robi to:

    edytor joes pokazujący symbol zastępczy BOM UTF-8, A edytor MC kropką

    Tam łatwo rozpoznać problem na początku. Inni redaktorzy mogą zidentyfikować jego obecność w menu Plik / Ustawienia (Notepad++ w systemie Windows może zidentyfikować i Rozwiąż problem ), Inną opcją sprawdzania obecności bom jest uciekanie się do hexeditor . On * Nix systems hexdump jest zwykle dostępny, jeśli nie graficzny wariant, który upraszcza kontrolę tych i innych kwestii:

    beav hexeditor pokazujący BOM utf-8

    Łatwą poprawką jest ustawienie edytora tekstu, aby zapisywał pliki jako " UTF-8 (no BOM)" lub podobne takie nazewnictwo. Często nowicjusze inaczej uciekają się do tworzenia nowych plików i po prostu skopiuj i wklej poprzedni kod z powrotem.

    Narzędzia korekcyjne

    Istnieją również zautomatyzowane narzędzia do sprawdzania i przepisywania plików tekstowych (sed/awk lub recode). Dla PHP w szczególności jest phptags tag tidier . Przepisuje znaczniki zamknięcia i otwarcia na długie i krótkie formy, ale także łatwo Poprawiono początkowe i końcowe problemy z białymi spacjami, Unicode i UTF-x BOM:

    phptags  --whitespace  *.php
    

    Jest rozsądne używać na całym include lub projektu katalog.

  5. Spacja po ?>

    Jeśli źródło błędu jest wymienione jako za zamknięcie ?> to jest miejsce, gdzie niektóre spacje lub surowy tekst został napisany. Znacznik końca PHP nie kończy wykonywania skryptu w tym punkt. Wszelkie znaki tekstowe / spacje po nim zostaną zapisane jako zawartość strony mimo to.

    Powszechnie zaleca się, w szczególności nowoprzybyłym, że PHP Zamknij znaczniki powinny być pomijane. To eschews mała część tych przypadków. (Dość często include()d skrypty są winowajcą.)

  6. Źródło błędu wymienione jako "Nieznany w linii 0"

    Zazwyczaj jest to rozszerzenie PHP lub php.ustawienie ini, jeśli nie ma źródła błędu jest konkretyzowany.

    • czasami jest to Ustawienie kodowania strumienia gzip lub ob_gzhandler.
    • ale może to być również dowolny podwójnie załadowany extension= moduł generowanie domyślnego uruchamiania PHP / Ostrzeżenie wiadomość.

  7. Poprzednie komunikaty o błędach

    Jeśli inna instrukcja lub wyrażenie PHP spowoduje komunikat ostrzegawczy lub zwrócenie uwagi na wydruk, to również liczy się jako przedwczesne wyjście.

    W tym przypadku musisz uniknąć błędu, opóźnić wykonanie polecenia lub wyłączyć wiadomość np. za pomocą isset() lub @() - gdy oba nie blokują debugowania później.

Brak błędu wiadomość

Jeśli masz error_reporting lub display_errors wyłączone na php.ini, wtedy nie pojawi się żadne Ostrzeżenie. Ale ignorowanie błędów nie sprawi, że problem zniknie daleko. Nagłówki nadal nie mogą być wysyłane po przedwczesnym wyjściu.

Więc kiedy header("Location: ...") przekierowania po cichu zawodzą to bardzo zaleca się sondę w poszukiwaniu ostrzeżeń. Odtwarzaj je za pomocą dwóch prostych poleceń na szczycie skryptu wywołania:

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

Lub set_error_handler("var_dump"); jeśli Wszystko inne zawiedzie.

Mówiąc o nagłówkach przekierowań, powinieneś często używać idiomu jak to dla końcowych ścieżek kodu:

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

Preferuje nawet funkcję użytkową, która drukuje wiadomość użytkownika w przypadku awarii.

Buforowanie wyjścia jako obejście

PHPS buforowanie wyjścia jest obejściem w celu złagodzenia tego problemu. Często działa niezawodnie, ale nie powinien substytut właściwej struktury aplikacji i oddzielenie wyjścia od sterowania logika. Jego faktycznym celem jest zminimalizowanie transferów do webserver.

  1. Na output_buffering= ustawienie jednak może pomóc. Skonfiguruj go w php.ini lub przez .htaccess albo nawet .użytkownik.ini on nowoczesne konfiguracje FPM/FastCGI.
    Włączenie go pozwoli PHP buforować wyjście zamiast przekazywać je do serwera www natychmiast. PHP może więc agregować nagłówki HTTP.

  2. Może być również zaangażowany w wezwanie do ob_start(); na szczycie skryptu wywołania. Które jest jednak mniej wiarygodny z wielu powodów: [103]}

    • Nawet jeśli <?php ob_start(); ?> uruchomi pierwszy skrypt, spacja lub BOM może zostać przetasowany wcześniej, czyniąc go nieskutecznym.

    • Może ukryć białe znaki dla wyjścia HTML. Ale jak tylko wniosek logika próbuje przesłać zawartość binarną (np. wygenerowany obraz), buforowane wyjście zewnętrzne staje się problemem. (Necessiting ob_clean() jako furher obejście.)

    • Bufor ma ograniczony rozmiar i może łatwo przekroczyć, gdy zostanie pozostawiony do wartości domyślnych. I to też nie jest rzadkim zdarzeniem, trudno wyśledzić kiedy to się stanie.

Oba podejścia mogą więc stać się zawodne - w szczególności podczas przełączania między konfiguracje programistyczne i / lub serwery produkcyjne. Dlatego buforowanie wyjścia jest powszechnie uważany za tylko kulę / ściśle obejście.

Zobacz również podstawowy przykład użycia w podręczniku, i więcej za i przeciw:

Ale zadziałało na innym serwerze!?

If you didn ' t get the nagłówki Ostrzeżenie przed, a następnie buforowanie wyjścia php.ustawienie ini zmieniło się. Prawdopodobnie nie jest skonfigurowany na obecnym / nowym serwerze.

Sprawdzanie z headers_sent()

Zawsze możesz użyć headers_sent() do sondy, jeśli nadal jest to możliwe... wyślij nagłówki. Który jest przydatny do warunkowego drukowania informacji lub zastosować inną logikę awaryjną.

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

Przydatne obejścia awaryjne to:

  • HTML <meta> tag

    Jeśli twój aplikacja jest strukturalnie trudna do naprawienia, następnie łatwa (ale nieco nieprofesjonalny) sposób zezwalania na przekierowania to wstrzykiwanie HTML <meta> tag. Przekierowanie można uzyskać za pomocą:

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

    Lub z krótkim opóźnieniem:

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

    Prowadzi to do nieprawidłowego HTML, gdy jest używany poza sekcją <head>. Większość przeglądarek nadal go akceptuje.

  • JavaScript redirect

    Jako alternatywa a JavaScript redirect może być używany do strony przekierowania:

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

    Chociaż jest to często bardziej zgodne z HTML niż obejście <meta>, opiera się na klientach obsługujących JavaScript.

Oba podejścia powodują jednak akceptowalne błędy, gdy oryginalny nagłówek HTTP() połączenia zawodzą. Najlepiej zawsze połączyć to z przyjaznym dla użytkownika Komunikatem i klikalny link jako ostateczność. (Co na przykład jest tym, co http_redirect () Rozszerzenie PECL działa.)

Dlaczego setcookie() i session_start() są również dotknięte

Zarówno setcookie() jak i session_start() muszą wysłać Set-Cookie: nagłówek HTTP. W związku z tym obowiązują te same warunki i generowane będą podobne komunikaty o błędach dla przedwczesnych sytuacji wyjściowych.

(oczywiście mają one również wpływ na wyłączone pliki cookie w przeglądarce, a nawet problemy z proxy. Funkcjonalność sesji oczywiście zależy również od darmowych miejsce na dysku i inne php.ustawienia ini itp.)

Dalsze linki

 3093
Author: mario,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:54

Ten Komunikat o błędzie zostanie wywołany, gdy cokolwiek zostanie wysłane przed wysłaniem nagłówków HTTP (z setcookie lub header). Najczęstsze przyczyny wysyłania czegoś przed nagłówkami HTTP to:

  • Przypadkowe białe znaki, często na początku lub końcu plików, jak to:

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

Aby tego uniknąć, po prostu pomiń zamknięcie ?> - i tak nie jest to wymagane.

  • znaki kolejności bajtów na początek pliku php. Sprawdź swoje pliki php za pomocą edytora szesnastkowego, aby dowiedzieć się, czy tak jest. Powinny zaczynać się od bajtów 3F 3C. Możesz bezpiecznie usunąć BOM EF BB BF z początku plików.
  • jawne wyjście, takie jak wywołania do echo, printf, readfile, passthru, kod przed <? itd.
  • Ostrzeżenie wysyłane przez php, jeśli display_errors php.obiekt ini jest ustawiony. Zamiast upaść na błąd programisty, php po cichu naprawia błąd i emituje ostrzeżenie. Podczas gdy ty może modyfikować display_errors lub error_reporting konfiguracje, powinieneś raczej rozwiązać problem.
    Typowe powody to dostęp do niezdefiniowanych elementów tablicy (np. $_POST['input'] bez użycia empty lub isset aby sprawdzić, czy dane wejściowe są ustawione), lub używając nieokreślonej stałej zamiast literału łańcuchowego (jak w $_POST[input], zwróć uwagę na brakujące cudzysłowy).

Włączenie buforowanie wyjścia powinno sprawić, że problem zniknie; wszystkie wyjścia po wezwanie do ob_start jest buforowana w pamięci do momentu zwolnienia bufora, np. z ob_end_flush.

Jednakże, podczas gdy buforowanie wyjściowe pozwala uniknąć problemów, powinieneś naprawdę określić, dlaczego Twoja aplikacja wysyła treść HTTP przed nagłówkiem HTTP. To byłoby jak rozmowa telefoniczna i omówienie Twojego dnia i pogody, zanim powiesz rozmówcy, że ma zły numer.

 204
Author: phihag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 08:22:59

Otrzymałem ten błąd wiele razy wcześniej i jestem pewien, że każdy programista PHP dostał ten błąd przynajmniej raz wcześniej.

Możliwe Rozwiązanie 1

Ten błąd mógł być spowodowany przez spacje przed początkiem pliku lub po końcu pliku.Tych pustych spacji nie powinno tu być.

Ex) NIE POWINNO TU BYĆ PUSTYCH SPACJI

   echo "your code here";

?>
THERE SHOULD BE NO BLANK SPACES HERE

Sprawdź wszystkie pliki powiązane z plikiem, który powoduje ten błąd.

Uwaga: czasami edytor (IDE) jak gedit (domyślny edytor Linuksa) dodaje jedną pustą linię przy zapisywaniu pliku. Tak się nie powinno stać. Jeśli używasz Linuksa. możesz użyć edytora VI do usunięcia spacji / linii po ?> na końcu strony.

Możliwe Rozwiązanie 2: Jeśli tak nie jest, użyj ob_start do buforowania wyjścia:

<?php
  ob_start();

  // code 

 ob_end_flush();
?> 

Spowoduje to włączenie buforowania wyjściowego, a nagłówki zostaną utworzone po buforowaniu strony.

 126
Author: Manish Shrivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-25 00:03:11

Zamiast poniższej linii

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

Napisz

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

Lub

?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php
To na pewno rozwiąże twój problem. Spotkałem się z tym samym problemem, ale rozwiązałem poprzez pisanie lokalizacji nagłówka w powyższy sposób.
 90
Author: Ipsita Rout,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-03 04:34:30

Robisz

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

Przed ustawieniem plików cookie, co jest niedozwolone. Nie można wysyłać żadnych danych wyjściowych przed nagłówkami, nawet pustej linii.

 41
Author: Seth Carnegie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-06 17:45:10

TYPOWE PROBLEMY:

(skopiowane z: źródło )

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

1) nie powinno być żadnego wyjścia (tj. echo.. lub kody HTML) przed header(.......); dowództwo.

2) Usuń dowolne white-space (lub newline) przed <?php i po ?> znaczniki.

3) ZŁOTA ZASADA! - sprawdź, czy ten plik php (a także, jeśli include inne pliki) ma UTF8 bez kodowania BOM (i nie tylko UTF-8 ). To jest problem w wielu przypadkach(ponieważ UTF8 zakodowany plik ma coś specjalnego na początku pliku php, czego twój edytor tekstu nie pokazuje)!!!!!!!!!!!

4) Po header(...); należy użyć exit;

5) Zawsze używaj 301 lub 302 odniesienie:

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

6) Włącz raportowanie błędów i znajdź błąd. twój błąd może być spowodowany przez funkcję, która jest nie działa. Po włączeniu raportowania błędów zawsze należy najpierw naprawić najwyższy błąd. Na przykład może to być "Warning: date_default_timezone_get(): nie jest bezpiecznie polegać na Ustawieniach strefy czasowej systemu."- dalej w dół może pojawić się błąd" headers not sent". Po naprawieniu błędu top-most (1st), ponownie załaduj stronę. Jeśli nadal masz błędy, napraw ponownie największy błąd.

7) jeśli żadne z powyższych nie pomoże, użyj przekierowania JAVSCRIPT(jednak mocno metoda niewskazana), może być ostatnią szansą w niestandardowych przypadkach...:

echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;
 35
Author: T.Todua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-27 22:17:04

To z powodu tej linii:

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

Nie powinieneś Drukuj / echo wszystko przed wysłaniem nagłówków.

 33
Author: Sarfraz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-06 17:45:21

Prosta wskazówka: prosta spacja (lub niewidoczny znak specjalny) w skrypcie, tuż przed pierwszym znacznikiem <?php, może to spowodować ! Zwłaszcza, gdy pracujesz w zespole i ktoś używa "słabego" IDE lub pomieszał w plikach z dziwnymi edytorami tekstu.

Widziałem takie rzeczy;)

 27
Author: Sliq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-16 23:28:04

[6]}Inna zła praktyka może wywołać ten problem, który jeszcze nie został stwierdzony.

Zobacz ten fragment kodu:

<?php
include('a_important_file.php'); //really really really bad practise
header("Location:A location");
?>
Wszystko w porządku, prawda?

Co jeśli " a_important_file.php " jest to:

<?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-------------------
To nie zadziała? Dlaczego?Ponieważ już generowana jest nowa linia.

Teraz, choć nie jest to powszechny scenariusz co zrobić, jeśli używasz frameworku MVC, który ładuje wiele plików przed przekazaniem rzeczy do kontrolera? To nie jest rzadki scenariusz. Przygotuj się na to.

Z PSR-2 2.2 :


  • wszystkie pliki PHP muszą używać Unix LF (linefeed) line ending.
  • wszystkie pliki PHP muszą kończyć się znakiem single blank line.
  • zamknięcie ?> tag musi być omitted z plików zawierających only php

Uwierz mi, przestrzeganie tych standardów może zaoszczędzić Ci wiele godzin od Twojego życia:)]}
 22
Author: MD. Sahib Bin Mahboob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-08 01:29:32

Czasami, gdy proces dev ma zarówno stacje robocze WIN, jak i systemy LINUX (hosting), a w kodzie nie widać żadnego wyjścia przed powiązaną linią, może to być formatowanie pliku i brak Unix LF (linefeed) koniec linii.

To, co zwykle robimy, aby szybko to naprawić, to zmiana nazwy pliku i w systemie LINUX utwórz nowy plik zamiast zmienionego, a następnie skopiuj zawartość do niego. Wiele razy to rozwiązuje problem, ponieważ niektóre pliki które zostały utworzone w WIN po przeniesieniu na hosting powodują ten problem.

Ta poprawka jest łatwa dla witryn zarządzanych przez FTP i czasami może zaoszczędzić trochę czasu naszym nowym członkom zespołu.

 16
Author: Lupin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-03 11:12:29

Ogólnie ten błąd pojawia się, gdy wysyłamy nagłówek po odbiciu lub wydrukowaniu. Jeśli ten błąd pojawi się na określonej stronie, upewnij się, że strona nie ma ECHA przed wywołaniem do start_session().

Przykład nieprzewidywalnego błędu:

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

//your page content

Jeszcze jeden przykład:

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

//your page content

Wniosek: nie wypisuje żadnego znaku przed wywołaniem session_start() lub header() funkcji, nawet ze spacją lub nową linią

 3
Author: Biswadeep Sarkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 14:46:45