• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Warning: Cannot modify header information - headers already sent by...

+2 głosów
10,164 wizyt
pytanie zadane 15 czerwca 2015 w PHP przez emwu Użytkownik (540 p.)
zamknięte 15 czerwca 2015 przez emwu

Cześć.

Robię pewien projekt. Oczywiście robiłem go na lokalnym serwerze (XAMP). Tam wszystko śmiga. Przeniosłem bazę i całą stronę na serwer docelowy. Niestety, na (prawie) wszystkich stronach, które wykorzystują przekierowanie w php (header ('Location: adres.php');) skrypt wywala następujący błąd:

Warning: Cannot modify header information - headers already sent by (output started at /podstrona/dodaj.php:29) in /podstrona/dodaj.php on line 41

W internecie znalazłem rozwiązanie polegające na dodaniu funkcji ob_start(); do skryptu. Pomogło to jednak tylko w przypadku systemu logowania. Nie mam pojęcia dlaczego.

Ma ktoś jakiś pomysł?

komentarz zamknięcia: Problem rozwiązany

2 odpowiedzi

+6 głosów
odpowiedź 15 czerwca 2015 przez Comandeer Guru (607,060 p.)
wybrane 15 czerwca 2015 przez emwu
 
Najlepsza

Na localu pewnie działa, bo PHP ma włączony output buffering i wszystko z automatu leci przez bufor - zatem błąd nie występuje.

ob_start to ręczne wymuszenie tego bufora i musi się znaleźć bezwzględnie na początku pliku PHP. Inna rzecz, że to w zasadzie hack. Nie byłby on potrzebny gdybyśmy się trzymali zasady podziału aplikacji. Każda aplikacja webowa jest jak cebula (czy tam ogr): ma warstwy. Jedną z warstw jest logika, inną - prezentacja. Jeśli wszystkie szablony wywali się do osobnych plików i będzie wyświetlać tylko wtedy, gdy trzeba o tego typu błędach można po prostu zapomnieć. Wówczas bowiem PHP najpierw przemieli wszystkie warunki i przekieruje gdzie trzeba, a dopiero później się zajmie wyświetlaniem czegokolwiek jeśli jest to potrzebne.

Zatem najlepsze rozwiązanie to oddzielenie logiki aplikacji od prezentacji, czyli inaczej: skorzystanie z systemu szablonôw - https://pornel.net/szablony Tego typu rzecz jest dodatkowo genialnym wstępem do poznania wzorca MVC, wciąż będącego najpopularniejszym wśród aplikacji webowych.

komentarz 15 czerwca 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
Pięknie wyjaśnione szefie !
komentarz 15 czerwca 2015 przez emwu Użytkownik (540 p.)
edycja 15 czerwca 2015 przez emwu
Dziękuję za piękne wyjaśnienie! :)
0 głosów
odpowiedź 15 czerwca 2015 przez draghan VIP (106,230 p.)
edycja 15 czerwca 2015 przez draghan

Ja mam pomysł. ;) Pokażesz kod pliku dodaj.php? Zobaczymy, co tam narozrabiałeś. ;)

Szybki research w google mówi, że tak się dzieje kiedy już wysłaliśmy jakieś dane do przeglądarki (np. funkcją echo()) i próbujemy później wysłać nagłówek - co oczywiście spali na panewce, bo nagłówek już został wysłany.

Tutaj masz link, gdzie zostało to bardzo dokładnie opisane (patrz na najlepszą odpowiedź):
http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php

Podobne pytania

0 głosów
2 odpowiedzi 2,294 wizyt
0 głosów
3 odpowiedzi 792 wizyt
pytanie zadane 7 lipca 2015 w HTML i CSS przez mowmiheniek Stary wyjadacz (11,900 p.)
0 głosów
0 odpowiedzi 172 wizyt
pytanie zadane 20 listopada 2017 w PHP przez Piotr Jarema Użytkownik (970 p.)

93,427 zapytań

142,421 odpowiedzi

322,648 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...