Cannot add header information - headers already sent
Z PHPEdia.pl
Spis treści |
Co oznacza komunikat?
Komunikat "Cannot add/modify header information - headers already sent by..." oznacza, że nie możemy za pomocą PHP wstawią nagłówków dla danej strony (np. przekierowanie albo zmiana typu 'mime') ponieważ wcześniej wysłaliśmy już jakieś dane do użytkownika (najczęściej kod HTML, dowolny znak, nawet spacje lub znak nowej linii).
przykład
Nasz kod wygląda mniej więcej tak:
<? //zmienna zawiera dowolny kod html (nawet spacja!) echo $tekst; //przykładowy nagłówek, który przeniesie nas na inną stoną: header( 'Location: http://wiki.php.pl' ); ?>
Kod wygeneruje omawiany komunikat.
Rozwiązanie problemu
Jeżeli konieczne jest użycie zmiennej $tekst przed nagłówkiem, możemy użyć buforowania na dwa sposoby.
przykład 1 - Użycie funkcji w PHP
<? //użycie funkcji na początku ob_start(); echo $tekst; header( 'Location: http://wiki.php.pl' ); //...i na koścu ob_end_flush(); ?>
Korzystamy tutaj z gotowych funkcji dostępnych w PHP od wersji 4.
przykład 2 - Edycja pliku konfiguracyjnego
Odnalezienie pliku konfigurującego PHP, wyszukać wiersz w którym, możemy zmienić 'output_buffering' z 'Off' na 'On'.
przykład 3 - Mediawiki i kodowanie utf8 w plikach rozszerzeń
Komunikat "Cannot add/modify header information - headers already sent by..." może pojawić się w przypadku korzystania z edytora (np. Editpad) do edycji plików php domyślnie stosującego kodowanie utf8. W przypadku gdy zapiszemy plik w kodowaniu utf8, zostaną przesłane dodatkowe znaki znajdujące się na początku pliku i nie widoczne w edytorze.
Dodawanie rozszerzenia w mediawiki:
<? include("extensions/articletocategory.php");
Rozwiązaniem jest otwarcie pliku articletocategory.php i zmiana jego kodowania, na przykład na latin2, co spowoduje usuniącie tych dodatkowych niewidocznych znaków, przez które pojawiaś się komunikat o wysłanym już nagłówku.
Jest to element FAQ, czyli zestawienia odpowiedzi na najczęściej zadawane pytania.
Zestawienie: Informacje | Podstawy PHP | Porady praktyczne | Pytania z forum | Bezpieczeństwo
