Jest ob_start()
stosowany do output buffering
tak że nagłówki nie są buforowane i wysyłane do przeglądarki? Czy mam tu sens? Jeśli nie, to dlaczego powinniśmy skorzystać ob_start()
?
php
output-buffering
Aditya Shukla
źródło
źródło
ob_get_contents()
sięob_get_clean()
i usunąćob_end_clean()
gdyżob_get_clean()
zasadniczo spełnia obie te funkcje. Odniesienie: php.net/manual/en/function.ob-get-clean.php (PHP 4> = 4.3.0, PHP 5)ob_start();
Czy to jest prawidłowe? Co się stanie, jeśli nie zostanie włączone?ob_end_clean
działa jak urok! Dzięki @Riley DuttonUżywam tego, więc mogę wyjść z PHP z dużą ilością HTML, ale nie mogę go renderować. Oszczędza mi to przechowywania go jako łańcucha, który wyłącza kodowanie kolorami IDE.
Zamiast:
źródło
ob_get_clean()
, a nieob_end_clean()
Przyjęta tutaj odpowiedź opisuje, co
ob_start()
nie - dlaczego nie jest używana (jakie było zadane pytanie).Jak stwierdzono w innym miejscu,
ob_start()
tworzy bufor, do którego zapisywane są dane wyjściowe.Ale nikt nie wspomniał, że w PHP można układać wiele buforów. Zobacz ob_get_level ().
Jeśli chodzi o to, dlaczego ....
Wysyłanie HTML do przeglądarki w większych fragmentach zapewnia większą wydajność dzięki zmniejszeniu obciążenia sieci.
Przekazywanie danych z PHP w większych porcjach zapewnia zwiększenie wydajności i pojemności poprzez zmniejszenie liczby wymaganych przełączników kontekstu
Przekazywanie większych porcji danych do mod_gzip / mod_deflate daje korzyść w zakresie wydajności, ponieważ kompresja może być bardziej wydajna.
buforowanie danych wyjściowych oznacza, że nadal możesz manipulować nagłówkami HTTP później w kodzie
jawne opróżnienie bufora po wypisaniu [head] .... [/ head] może pozwolić przeglądarce rozpocząć zbieranie innych zasobów dla strony przed zakończeniem strumienia HTML.
Przechwytywanie danych wyjściowych w buforze oznacza, że można je przekierować do innych funkcji, takich jak poczta e-mail, lub skopiować do pliku jako buforowaną reprezentację treści
źródło
Masz to do tyłu. ob_start nie buforuje nagłówków, buforuje zawartość. Używanie
ob_start
pozwala przechowywać zawartość w buforze po stronie serwera, dopóki nie będziesz gotowy do jej wyświetlenia.Jest to powszechnie stosowane, aby strony mogły wysyłać nagłówki „po”, że „wysłały” już trochę treści (tj. Decydują się na przekierowanie w połowie renderowania strony).
źródło
Wolę:
źródło
ma to na celu dalsze wyjaśnienie odpowiedzi JD Isaaksa ...
Problem, z którym często się spotykasz, polega na tym, że używasz php do generowania html z wielu różnych źródeł php, a źródła te często, z jakiegokolwiek powodu, generują na różne sposoby.
Czasami masz dosłowną zawartość HTML, którą chcesz bezpośrednio wyświetlić w przeglądarce; innym razem dane wyjściowe są tworzone dynamicznie (po stronie serwera).
Treść dynamiczna zawsze będzie (?) Ciągiem. Teraz musisz połączyć ten zhitalizowany dynamiczny HTML z dowolnym dosłownym, bezpośrednim HTML-em ... w jedną znaczącą strukturę węzłów HTML.
Zwykle zmusza to programistę do zawinięcia całej treści bezpośrednio do wyświetlania w łańcuch (jak omawiał JD Isaak), aby można ją było poprawnie dostarczyć / wstawić w połączeniu z dynamicznym HTML-em ... nawet jeśli tak naprawdę nie chcę to zapakowane.
Ale stosując metody ob _ ## można uniknąć bałaganu owijania łańcuchów. Zamiast tego dosłowna zawartość jest wyprowadzana do bufora. Następnie w jednym prostym kroku cała zawartość bufora (wszystkie dosłowne pliki HTML) są łączone w ciąg dynamicznych plików HTML.
(Mój przykład pokazuje, że dosłowny html jest wyprowadzany do bufora, który jest następnie dodawany do łańcucha html ... spójrz również na przykład JD Isaaks, aby zobaczyć zawijanie łańcucha html).
źródło
Ta funkcja nie dotyczy tylko nagłówków. Dzięki temu możesz zrobić wiele interesujących rzeczy. Przykład: możesz podzielić swoją stronę na sekcje i użyć jej w następujący sposób:
Możesz przechwycić wygenerowany tutaj wynik i dodać go w dwóch całkowicie różnych miejscach w układzie.
źródło
W istniejących odpowiedziach nie wymieniono następujących elementów: Konfiguracja rozmiaru bufora Nagłówek HTTP i zagnieżdżanie.
Konfiguracja rozmiaru bufora dla ob_start:
Powyższy kod poprawia wydajność serwera, ponieważ PHP wyśle większe porcje danych, na przykład 4KB (bez wywołania ob_start, php wyśle każde echo do przeglądarki).
Jeśli zaczniesz buforować bez wielkości porcji (np. Prosty ob_start ()), strona zostanie wysłana raz na końcu skryptu.
Buforowanie wyjściowe nie wpływa na nagłówki HTTP, są przetwarzane w inny sposób. Jednak ze względu na buforowanie możesz wysyłać nagłówki nawet po wysłaniu wyjścia, ponieważ nadal znajduje się ono w buforze.
Ładnie wyjaśnione tutaj: https://phpfashion.com/everything-about-output-buffering-in-php
źródło
Nie, mylisz się, ale kierunek pasuje;)
Buforowanie wyników buforuje dane wyjściowe skryptu. To wszystko (krótko) wszystko po
echo
lubprint
. Nagłówki polegają na tym, że można je wysłać tylko wtedy, gdy jeszcze nie zostały wysłane. Ale HTTP mówi, że nagłówki są pierwszą transmisją. Więc jeśli wypisujesz coś po raz pierwszy (w żądaniu), nagłówki są wysyłane i nie możesz ustawić żadnych innych nagłówków.źródło