Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zasadność stosowania ob_start()
Forum PHP.pl > Forum > Przedszkole
Jarod
Funkcję ob_start() można wykorzystać na 2 sposoby:
1. do buforowania pobranych stron
2. (najczęściej) do ominięcia komunikatu "(...)headers already sent by (...)"

Ostatnio spotkałem się z opinią, że wykorzystywanie ob_start() do drugiego przypadku jest jak stosowanie globali.. Dlatego też chciałbym poznać Wasze zdanie na ten temat. Czy uważacie, że to "błąd programistyczny"?

Przecież nie raz chcemy przekierować stronę za pomocą header('Location: ' . 'http://somehost/somesite/');
ale to zależy od pewnych warunków i nie da się wcześniej uniknąć nie wysyłnia danych do przęglądakri.. (?)
mike
Cytat(J4r0d @ 19.03.2007, 22:38:53 ) *
Ostatnio spotkałem się z opinią, że wykorzystywanie ob_start() do drugiego przypadku jest jak stosowanie globali.. Dlatego też chciałbym poznać Wasze zdanie na ten temat. Czy uważacie, że to "błąd programistyczny"?
Dla mnie sprawa jest prosta, to jest oczywisty błąd.
Decyzja o tym co ma zostać wysłane użytkownikowi powinna zapaść zanim zaczniemy coś wysyłać.
Bo po co mamy mu wysyłać jakieś śmieci skoro nie jesteśmy czegoś pewni?

Cytat(J4r0d @ 19.03.2007, 22:38:53 ) *
Przecież nie raz chcemy przekierować stronę za pomocą header('Location: ' . 'http://somehost/somesite/');
ale to zależy od pewnych warunków i nie da się wcześniej uniknąć nie wysyłnia danych do przęglądakri.. (?)
To tutaj moje pytanie: Co ma piernik do wiatraka? Sprawdzanie warunków, z tego co wiem, nie powoduje wysłania danych do przeglądarki.
Wiec jest to żaden argument. Najpierw sprawdzamy i decydujemy się na to co wysłać a potem wysyłamy.
Jarod
Cytat(mike_mech @ 19.03.2007, 22:48:13 ) *
To tutaj moje pytanie: Co ma piernik do wiatraka? Sprawdzanie warunków, z tego co wiem, nie powoduje wysłania danych do przeglądarki.
Wiec jest to żaden argument. Najpierw sprawdzamy i decydujemy się na to co wysłać a potem wysyłamy.

Ok. A co w przypadku, gdy główny skrypt generuje nagłówek, menu strony a w głównej części dynamiczną zawartość. I jeśli wystąpi pewien warunek to coś wyświetlamy a jeśli inny to zapisujemy coś do bazy i przekierowujemy na inną podstronę?
mike
To nadal jest błąd.

Najpierw programista powinien się zdecydować co chce wygenerować/pokazać a potem to pokazać.
Widok powinien być oddzielony od logiki strony.
nexis
Cytat(J4r0d @ 19.03.2007, 23:15:05 ) *
A co w przypadku, gdy główny skrypt generuje nagłówek, menu strony a w głównej części dynamiczną zawartość.


To wtedy skrypt jest źle napisany i nie zbyt dobrze przemyślany.
Jarod
Cytat(mike_mech @ 19.03.2007, 23:22:11 ) *
Widok powinien być oddzielony od logiki strony.


Ok jak stosujesz MVC. Ale jak piszesz skrypt mieszając wszystko.. Kiedyś nikt nie słyszał o MVC.
Cytat(mike_mech @ 19.03.2007, 23:22:11 ) *
Najpierw programista powinien się zdecydować co chce wygenerować/pokazać a potem to pokazać.

Ale w klasycznym stylu, gdzie plik index.php zawiera nagłówek, menu i stopkę a środek strony generowany jest przez instrukcje switch (czyli includowane są odpowiednie pliku na podstawie np wartości $_GET NIE DA SIĘ zaplanować nagłówka. Trzeba by generować całą strone, albo ładować wszystko do jednej zmiennej a później wyświetlać..

Pozwoliłem sobie dopisać. Poniżej link do posta, w którym kolega próbuje przekierować użytkownika na inna stronę po wysłaniu maila.

Temat: php wysylanie formularza na dwa adresy email


Ciężko coś takiego osiągnąć bez ob_start(). Chyba, że w głównym pliku w sekcji head zamieścimy warunki, które będą sprawdzały określony parametr $_GET i na podstawie tego ustawiały odpowiednie meta. Przy dużych aplikacjach łatwo o pomyłkę i mało elastyczne..
mike
~Jarod masz z tym problem bo cały czas trzymasz się argumentacji, którą deje Ci błędne założenie z jakimś lipnym plikiem nagłówka.

Masz jakiś head.php, w nim jakiś nagłówek, jakiś html. I bezmyślnie zawsze go dołączasz. Nic więc dziwnego, że potem są problemy z nagłówkami bo coś już zostało wysłane.
A rozwiązaniem jest banalne i nie rozumiem dlaczego je odrzucasz.
Najpierw decydujesz jakie nagłówki wysłać a potem to robisz.


Podany przez Ciebie przykład jest wręcz oczywisty.
Formularz został wysłany?
Nie:
1. Pokazujesz formularz
Tak:
1. Odbierasz dane z niego i wysyłasz maila.
2. Pokazujesz formularz i komunikat, że maile wysłano.
Jarod
Cytat(mike_mech @ 29.03.2007, 09:00:35 ) *
Masz jakiś head.php, w nim jakiś nagłówek, jakiś html. I bezmyślnie zawsze go dołączasz. Nic więc dziwnego, że potem są problemy z nagłówkami bo coś już zostało wysłane.
A rozwiązaniem jest banalne i nie rozumiem dlaczego je odrzucasz.
Najpierw decydujesz jakie nagłówki wysłać a potem to robisz.


Słyszałem, że nagłówki powinno się wysyłać tylko w sekcji head poprzez meta. Nie powinno się stosować header(). A skoro tak to jak zdecydować w pliku footer.php, który nagłówek wysłać skoro jeszcze tego nie wiem? ;/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.