Cannot add header information - headers already sent

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

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.

Linki zewnętrzne


Jest to element FAQ, czyli zestawienia odpowiedzi na najczęściej zadawane pytania.

Zestawienie: Informacje | Podstawy PHP | Porady praktyczne | Pytania z forum | Bezpieczeństwo