Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] buforowanie
Forum PHP.pl > Forum > PHP
outsider
Witam

Szukalem wszedzie, ale nie znalazlem dokladnej odpowiedzi. Moze mi ktos wytlumaczyc dokladnie, jak dziala te buforowanie ob_start(); ? Po co mam je wstawiac w kodzie ? Mozna je pare razy wstawiac ? O co chodzi z tym include i ob_start(); ? Troche tego nie rozumiem, bo wszystkie artykuly o tym odrazu przechodza do kodu bez dokladnego wytlumaczenia z dobrymi przykladami. Za odpowiedz z gory dziekuje smile.gif

Pozdrawiam !
blooregard
php.net/ob_start()

i kolejne, które są tam wymienione.
Przyjrzyj się przykładom.
outsider
Cos juz lapie, czyli kod w ktory jest miedzy ob_start(); a ob_end_flush(); moze wywolac funkcje ktora zmieni kod ktory jest zawarty miedzy nimi ?

Kiedys sciaglem skrypt ktory wlasnie mial ob_start(); zaczynajacy sie na poczatku i konczacy sie na koncu kodu(HTML jak i PHP). Jaki byl tego sens ? W dodatku zadna funkcja nie byla wykonywana.
blooregard
Nie, chodzi o to, że kod pomiędzy ob_start() a ob_flush() jest wykonywany, ale jego wynik nie jest wyświetlany.
Możesz np. wygenerować całą kompletną stronę HTML, (w buforze, czyli pomiędzy ob_start() i ob_flush() ), przypisać np. do $zmienna i wyświetlić ją na ekranie jednym poleceniem :
Kod
echo $zmienna;
outsider
Czyli buforowanie calej strony bez zadnych dzialan - bo mozna jakas funkcje wywolac lub jak pisal blooregard zapisac cala strone do zmiennej - jest bezsensu ? Bo tak jak pisalem, sciaglem skrypt ktory mial buforowanie od poczatku do konca i nic z nim nie robil. Heh, sorki ale serio tego nie rozumie smile.gif
blooregard
Na przykład w takim zastosowaniu to się przydaje:

Generujesz w buforze dynamicznie maila w html (nic się nie wyświetla na stronie).
Zawartość bufora zapisujesz z $zmienna;

W f-cji mail() podajesz $zmienna; jako treść i wysyłasz.

Pozwala to ominąć np. problemy z headers() i nie wywala błędów typu: "headers already send in..." blabla.

Sorry, piszę o tym przykładzie "z palca", więc może detale pokręciłem, ale chodziło o koncepcję zastosowania bufora. Inaczej już wytłumaczyć nie potrafię.
Mati7
Buforowanie wyjścia może się Ci przydać wtedy gdy np. chcesz wstawić gdzies wewnątrz kodu funkcję generującą nagłówek, czyli header(), czy setcookie() zawartość pomiędzy ob_start() a ob_flash() jest nie tylko buforowana, ale także porządkowana wten sposób że najpierw do przeglądarki zostają wysłane wszystkie nagłówki a później cała reszta. Normalnie bez zastosowania ob_start w takiej sytuacji otrzymałbyć błąd z informacją, że "nagłówki zostały już wysłane"

Poza tym możesz użyć ob_start("ob_gzhandler") do skompresowania byfora np. całej strony. Chociaż lepsze wyniki otrzymasz jesli na przykład skompresujesz w ten sposób pliki .css lub .js w maualu php są jakies przykłady...

Cytat
Bo tak jak pisalem, sciaglem skrypt ktory mial buforowanie od poczatku do konca i nic z nim nie robil. Heh, sorki ale serio tego nie rozumie

Być może ktoś umieścił to nie potrzebnie...
outsider
Dzieki, teraz to ma sens smile.gif
erix
Cytat
Normalnie bez zastosowania ob_start w takiej sytuacji otrzymałbyć błąd z informacją, że "nagłówki zostały już wysłane"

Chyba już nikt nie pamięta, do czego w ogóle zostało wymyślone buforowanie wyjścia... :/

Właściwym przeznaczeniem funkcji nie jest obejście problemów nagłówkowych (bo to jest obejście, a nie rozwiązanie), a umożliwienie przetwarzania całej wygenerowanej strony. Funkcja zadeklarowana przy ob_start" title="Zobacz w manualu PHP" target="_manual podczas wywołania przez parser obrabia całą treść, która ma zostać wysłana do przeglądarki. O ile pamiętam, na tej zasadzie działa dopisywanie identyfikatora sesji w kodzie HTML.

Również działa, jak to wcześniej wspomniał ~Mati7 jako kompresor. Dzięki kontroli wyjścia można również napisać własny kompresor (nie tylko deflate/gzip), ale to już zależy od klienta, który będzie obsługiwał konkretne algorytmy. W rzeczywistości, własna metoda kompresji jest czysto hipotetyczna. winksmiley.jpg
outsider
Dzieki wielkie, teraz to rozumiem winksmiley.jpg Z tym kompresorem troche nie czaje, w jaki sposob to niby dziala ?
erix
Obrazowo: winksmiley.jpg

Ćwiczysz odbicia w tenisa z wyrzutnią. Wyrzutnia, to serwer, Ty, gość strony. Wyrzutnia wypluwa piłeczkę, przylatuje sobie wróbelek (ob_start" title="Zobacz w manualu PHP" target="_manual), który dziobie ją w locie i do Ciebie trafia podziurawiona piłka. winksmiley.jpg
outsider
hehe, dobry przyklad smile.gif dzieki
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.