Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zasadność stosowania ob_start()
Jarod
post 19.03.2007, 22:38:53
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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.. (?)


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mike
post 19.03.2007, 22:48:13
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Jarod
post 19.03.2007, 23:15:05
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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ę?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mike
post 19.03.2007, 23:22:11
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nexis
post 20.03.2007, 10:50:26
Post #5





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


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.


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Jarod
post 29.03.2007, 09:49:26
Post #6





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
mike
post 29.03.2007, 10:00:35
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


~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.
Go to the top of the page
+Quote Post
Jarod
post 29.03.2007, 19:02:30
Post #8





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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? ;/


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 17:33