Często w Internecie spotykam ludzi, którzy mają pewien problem z PHP. Przeważnie brzmi on następująco:
Warning: Cannot modify header information – headers already sent by (output started at ścieżka do pliku:linia kodu) in ścieżka do pliku on line linia kodu
Gdyby go przetłumaczyć z języka angielskiego na polski to uzyskalibyśmy coś takiego:
Uwaga: Nie można zmodyfikować informacji nagłówkowych – nagłówki zostały już wysłane przez ([...]) w [...]
Można z tego wywnioskować, że skrypt wyrzuca błąd, ponieważ każesz mu zmodyfikować coś, czym już nie może dysponować – tzw. nagłówkami. Możecie spytać – a co to właściwie są te nagłówki? Według Cioci Wikipedii są to “wszelkie komendy używane do komunikacji między przeglądarką a serwerem WWW”. Mówiąc prościej – w nagłówkach zawarte są wszelkie informacje przesyłane przez serwer do przeglądarki, takie jak na przykład: język strony, typ MIME, informacje o ciasteczkach, etc.
Wracając do naszego problemu: aby mu zaradzić, należy w pewien sposób oszukać serwer i poczekać z wysłaniem nagłówków do czasu, kiedy skrypt zostanie do końca przetworzony.
Dokonamy tego, poprzez dodanie na samym początku skryptu takiej linijki kodu:
<?php ob_start(); // void ob_start([string callback_function]) ?>
Otworzy ona bufor i będzie w nim zapisywać dane dopóki nie odnajdzie jednej z komend służącej do zamknięcia go. Taką funkcją jest na przykład:
<?php ob_end_flush(); // void ob_end_flush() ?>
Dzięki tej “sztuczce” możemy spokojnie bawić się w kodzie takimi funkcjami jak “setcookie”, “header”, czy “session_start”.