2009-07-29 14 views
7

Czy ob_start PHP można nazwać więcej niż raz?Czy ob_start PHP można nazwać więcej niż raz?

Przepraszam, jeśli to głupie pytanie, ale naprawdę nie wiem.

Moja strona jest naprawdę duża (ilość plików), jest to sieć społecznościowa, a jeden z dołączonych plików używa bufora wyjściowego ob_start PHP do czegoś, nie jestem kimś innym, kto uruchomił moją stronę dawno temu i teraz jest W moim przypadku muszę przyjrzeć się temu bardziej, aby zobaczyć, co dokładnie robi.

W każdym razie chcę użyć ob_start ("ob_gzhandler"); skompresować pliki CSS, a wszystkie pliki w mojej witrynie zostaną załadowane (włączone) przez plik indeksu, więc chcę się dowiedzieć, czy mogę go użyć, mimo że jest już używany w innym miejscu kodu?

Odpowiedz

15

Tak, możesz zadzwonić więcej niż raz. Tworzy nowy bufor za każdym razem jednak, więc bądź ostrożny.

Z manual: „bufory wyjściowe są wieżowych, czyli można nazwać ob_start(), podczas gdy inny ob_start() jest aktywna Wystarczy upewnić się, że zadzwonisz ob_end_flush() odpowiednią liczbę razy, jeśli Multiple Output zwrotnego.. funkcje są aktywne, dane wyjściowe są filtrowane sekwencyjnie przez każdą z nich w kolejności zagnieżdżania. "

+0

Dzięki i jak już wspomniałem jest już nazywany w moim skrypcie muszę wyśledzić i zobaczyć, czy ob_end_flush() jest jeszcze nazywany, jeśli nie jest to, co by to spowodowało? – JasonDavis

+0

Kto wie, może spróbować. –

+1

Bufory wyjściowe są wypróżniane na końcu wykonywania skryptu, jeśli nie zrobiłeś tego sam z 'ob_flush()' lub 'ob_end_flush()'. Jeśli jednak masz wiele zagnieżdżonych buforów i spodziewasz się przetworzyć ich zawartość w określonej kolejności, możesz zobaczyć dziwne dane wyjściowe. – zombat

2

Mówisz to:

Ja chce używać ob_start ("ob_gzhandler"); skompresować CSS plików

wolałbym serwowania i kompresji JS/CSS (dobrze, statyczne) plików jest zadanie serwera WWW (np. Apache), a nie PHP.

O tym, można spojrzeć na mod_deflate - przynajmniej, jeśli używasz Apache 2.

wszystkie pliki na moim miejscu ładowane (w zestawie) do pliku indeksu

Czy to naprawdę konieczne? Pracujesz w PHP bez wyraźnego powodu (?), W ten sposób.
(Zwróć uwagę, że nawet jeśli pliki CSS/JS są obsługiwane przez PHP, Apache powinien być w stanie skompresować je za pomocą mod_deflate, to samo dotyczy również HTML, JSON, ...btw)

Kolejną zaletą nie przechodzi PHP na serwerze te pliki jest to, że łatwiej byłoby, aby je obsługiwany przez inny serwer, a Twoja strona będzie rosnąć (jeśli rośnie na tyle, faktycznie):

  • możesz mieć kilka "serwerów PHP", przetwarzać strony PHP
  • i jeden lub dwa "serwery plików statycznych", tylko serwerowe obrazy CSS/JS// i rozładować obciążenie lub twoje "serwery aplikacji" ; nie ma potrzeby korzystania z PHP na tych; można też użyć coś jak lighttpd zamiast Apache


Mając na uwadze powyższe, ob_start mówi tak:

bufory wyjściowe są wieżowych, czyli można nazwać ob_start(), podczas gdy inny Funkcja ob_start() jest aktywna. Tylko upewnij się, że nazwie ob_end_flush() odpowiednią liczbę razy. Jeśli wiele funkcji wywołania zwrotnego jest aktywnych, dane wyjściowe są filtrowane kolejno przez każdą z nich w kolejności zagnieżdżania.

Tak, myślę, że odpowiedź na to pytanie brzmi „tak” :-)

+0

Dzięki za informacje i tak, mam zamiar użyć lighthttpd do obrazów w końcu do włączenia plików przez mój indeks, robię to; $ pageId ['account.profile.settingsBETA'] = 'member/account.profile.settingsBETA.php'; Ułatwia mi to śledzenie wszystkich stron, wiele stron to robi, to nie jest dobre? – JasonDavis

+0

Indeks podstawowy zawiera plik nagłówkowy, a następnie zawiera treść z tego, co napisałem powyżej, a następnie zawiera stopkę o nazwie – JasonDavis

+0

OK w przypadku plików PHP; ale robisz to również dla plików CSS? (lub nie rozumiem, co powiedziałeś po raz pierwszy) –

Powiązane problemy