Pisząc w PHP natrafiałem czasami na błąd:
Warning: Cannot modify header information - headers already sent by ...
Wiedziałem, co było powodem tego błedu: header() może być wywoływany zanim zostanie wysłany do przeglądarki jakikolwiek tekst. I tutaj zaczynała się gimnastyka, bo tekst (może jakaś zmienna) musiała być wysłana wcześniej a przeglądarka zgłasza cały czas błąd.
Ale oto z pomocą przychodzi funkcja ob_start. Buforuje ona wszystko przed wysłaniem nagłówka (nagłówki są wysyłane po wygenerowaniu całego skryptu), oto przykład użycia:
<?php
ob_start();
// TRESC SKRTYPTU PHP
ob_end_flush();
?>





Odpowiedzi
pon., 09/06/2008 - 12:37
nawet działa - dzięki.
Zastanawiam się co on naprawdę robi i jak to wpływa na bezpieczeństwo?
czw., 19/06/2008 - 10:13
+1 dla Krzysztofa. ;) dziękować za prosty i szybki sposób pozbycia się błędu. Co nie oznacza iż chciałabym zrozumieć gdzie popełniłam błąd. Ale to może jak będę mieć czas.. w każdym razie dziękować za rozwiązanie.
śr., 02/07/2008 - 11:44
Użyłem tego na swojej stronie. Przez chwilę działało, lecz teraz już nie działa! Wyświetla mi błąd: "Warning: Cannot modify header information - headers already sent by ...".
śr., 02/07/2008 - 15:25
hmm nie wiem co odpowiedzieć, piszesz:
"przez chwilę działało, potem przestało działać", sprawdź jeszcze raz kod, to albo działa - albo nie, a nie czasami działa lub tylko przez chwilę.
sob., 12/07/2008 - 08:58
super :) u mnie też działa ;) problem pojawił sie po instalacji wordpress 2.5.1 i udalo mi sie go rozwiązać w sposób podany przez Krzyśka ;) Dzięki !
sob., 12/07/2008 - 17:09
Proste i skuteczne !
Dzięki Krzysztof ;)
ndz., 20/07/2008 - 12:11
Pomogło. Dzięki
czw., 31/07/2008 - 17:34
Ludzie... Przecież to podstawy PHP...
ndz., 24/08/2008 - 16:10
Owszem, zdarza się i tak że podziała przez chwilę i przestanie. Ja tak na przykład też mam (co prawda używam kompresji gz dodatkowo,
ob_start("ob_gzhandler"), ale to nie powinno mieć znaczenia) - chwilę podziała i przestaje.śr., 24/09/2008 - 10:56
Mnie również pomogło:) dzięki.
sob., 31/01/2009 - 22:55
Faktycznie pomogło, dzięki
pon., 22/06/2009 - 17:50
Dzięki za to rozwiązanie u mnie pomogło.
U mnie ten błąd pojawił się jak przerzuciłem skrypt php z wampa na xamppa.
Coś tam podejrzewam dlaczego ale nie chce mi się rozkmilać bo czasami jak zacznę to dwa dni siedzę.
Pozdrawiam,
Darek
www.piekloniebo.pl
sob., 01/05/2010 - 21:46
A u mnie nie działa, próbowałem już wszystkiego, przeczytałem 30 stron postów, forum, blogów, artykułów i nie wiem co jeszcze i żadna z metod nie działa, a nie chciałbym instalować wszystkiego od nowa =[
Używam Drupala 6, zawsze wszystko chodziło, a tu nagle zonk =[
śr., 07/07/2010 - 00:21
Mam odpowiedz na wasze wszelkie meczarnie.. jesli komus nie dziala wyzej opisane rozwiazanie to niech wstawi na kazdej odwolujacej do bledu stronie taka linie:
<?php ob_start(); ?>
ma byc na samej gorze kazdej strony ktora definiuje blad!
meczylem sie z tym cale wieki bo na gorze strony nad poczatkiem skryptu mam kod html ktory zawiera spacje a nie moglem sie go pozbyc - jednak to rozwiazanie pomoglo idealnie :)
czw., 23/09/2010 - 07:52
Hmmm wstawiłem twój kod do WordPress 3.0.1 bo miałem ten sam błąd i o dziwo nic sie nie stało, błąd znikł kiedy usunołem twój kod, czyli praktycznie nic nie zmieniłem. Myślę że błąd generuje sie po stronie serwera przez co czasami działa czasami nie, humorzasty serwer...
ndz., 16/01/2011 - 18:28
globalnie trzeba zminic ustawienia w pliku
php.ini na: output_buffering = On - domyslnie jest Off
Albo na każdej strnie używać ob_start() na samym poczatku kodu strony (bez żadnych białych spacjii!) - i ob_end_flush() na samym końcu strony
wt., 08/02/2011 - 19:45
serdeczne dzieki. rwalem juz wlosy z glowy.
śr., 06/04/2011 - 18:51
u mnie pomogło usunięcie session_start (bo otwieram na innej stronie)
ob_start() - nie potrzebne
header("Location: sklep.php");
śr., 22/06/2011 - 11:18
Można także zmienić ustawienia nie w php.ini ale w .htaccess na początku dopisać php_flag output_buffering on
ndz., 22/01/2012 - 18:25
Dzięki! Miałem z tym nie lada problem i już chciałem usuwać wszystkie spacje, tabulatory i nbsp, bo większość stron tak właśnie robiła =P Super sprawa ten ob_start() ;)
ndz., 05/02/2012 - 12:42
nie trzeba nawet czasme używać ob_start() i ob_end_flush():
"Jeżeli zapisujemy pliki w kodowaniu UTF-8, to trzeba pamiętać żeby na początku pliku nie występował znacznik BOM. Znacznik ten będzie powodował wyświetlanie błędu PHP. Edytory tekstu jak np. Notepad++ posiada możliwość zapisu bez tego znacznika."
pon., 12/03/2012 - 11:56
zamiast ob_end_flush() mozna jescze uzyc ob_end_clean() ... u mnei pomoglo clean ;)
wt., 08/06/2010 - 03:30
Ale dawałeś te funkcie od w pliku do którego przekierowujesz? Bo ja dajesz ob_start() i ob_end_flush() w pliku gdzie używasz header(''); to właśnie ten błąd będzie wywalał.
sob., 30/04/2011 - 10:50
dzięki za podpowiedź - faktycznie - jak mamy łączenie za pomocą include to na stronie głownej trzeba wstawić, a nie na "podstronie"
Dodaj nową odpowiedź