Jak naprawić błąd "Headers already sent" w PHP
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ć?
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ć:
-
- SPACJA przed
<?php
lub po?>
- UTF-8 znak porządkowy bajtów konkretnie
- poprzednie komunikaty o błędach lub ogłoszenia
- SPACJA przed
-
-
print
,echo
i innych funkcji wytwarzających wyjście - Raw
<html>
sections prior<?php
code.
-
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:
-
Drukuj, echo
Intencjonalne wyjście ze instrukcji
print
iecho
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ę, żeheader()
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. -
-
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łanieheader()
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.
-
SPACJA przed
<?php
Dla " script.php line 1 " warningsJeś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.
-
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:
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:Ł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
lubrecode
). Dla PHP w szczególności jestphptags
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.
-
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ą.) -
Ź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
lubob_gzhandler
. - ale może to być również dowolny podwójnie załadowany
extension=
moduł generowanie domyślnego uruchamiania PHP / Ostrzeżenie wiadomość.
- czasami jest to Ustawienie kodowania strumienia
-
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.
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.-
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:
- co to jest buforowanie wyjścia?
- dlaczego warto korzystać z buforowania wyjściowego w PHP?
- czy używanie buforowania wyjściowego jest uważane za złą praktykę?
- przykład użycia buforowania wyjścia jako poprawnego rozwiązania dla "już wysłanych nagłówków"
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>
tagJeś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
- Google udostępnia długą listę podobnych dyskusji .
- i oczywiście wiele szczególnych przypadków zostało również omówionych na Stack Overflow.
- WordPress FAQ wyjaśnia jak rozwiązać problem z nagłówkami wysłanych ostrzeżeń? w sposób ogólny. [113]}Adobe Community: rozwój PHP: dlaczego przekierowania nie działają (nagłówki już wysłane)
- Nucleus FAQ: co oznacza "już wysłane nagłówki stron"?
- jeden z bardziej dokładne wyjaśnienia to nagłówki HTTP i funkcja PHP header () - samouczek autorstwa NicholasSolutions (link do archiwum internetowego). Obejmuje on HTTP w szczegółach i daje kilka wskazówek do przepisywania skryptów.
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ąć BOMEF 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życiaempty
lubisset
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.
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.
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.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.
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;
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.
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;)
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.
- 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ącychonly php
Uwierz mi, przestrzeganie tych standardów może zaoszczędzić Ci wiele godzin od Twojego życia:)]}
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.
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ą
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