2009-07-29 11 views
7

L'ob_start di PHP può essere chiamato più di una volta?L'ob_start di PHP può essere chiamato più di una volta?

Scusate se questa è una domanda stupida ma davvero non lo so.

Il mio sito è molto grande (quantità di file), è un social network e uno dei file inclusi utilizza il buffer di output di PHP di ob_start per qualcosa, non sono certo che qualcun altro abbia iniziato il mio sito molto tempo fa e ora lo è il mio ho bisogno di esaminarlo di più per vedere cosa sta facendo esattamente.

In ogni caso, desidero utilizzare ob_start ("ob_gzhandler"); per comprimere i file CSS e tutti i file sul mio sito vengono caricati (inclusi) attraverso il file indice, quindi voglio sapere se sono in grado di usarlo anche se è già in uso da qualche altra parte nel codice?

risposta

15

Sì, è possibile chiamarlo più di una volta. Tuttavia, ogni volta crea un nuovo buffer, quindi fai attenzione.

Da manual: "I buffer di output sono impilabili, ovvero è possibile chiamare ob_start() mentre un altro ob_start() è attivo. Assicurati di chiamare ob_end_flush() il numero appropriato di volte. le funzioni sono attive, l'output viene filtrato sequenzialmente attraverso ciascuno di essi in ordine di nidificazione. "

+0

Grazie e come ho già detto è già chiamato nel mio script ho bisogno di rintracciare e vedere se ob_end_flush() è ancora chiamato, se non è ciò che ciò causerebbe? – JasonDavis

+0

Chi lo sa, potrebbe benissimo provarlo. –

+1

I buffer di output vengono scaricati alla fine dell'esecuzione dello script se non lo si è fatto da soli con 'ob_flush()' o 'ob_end_flush()'. Tuttavia, se si dispone di più buffer nidificati e si prevede di elaborare il contenuto in un ordine particolare, è possibile che venga visualizzato un output strano. – zombat

2

Tu dici questo:

Sono voler utilizzare ob_start ("ob_gzhandler"); per comprimere i CSS file

avrei preferito servire e comprimere JS/CSS (beh, statici) file è il lavoro del server Web (es. Apache) e non PHP.

A proposito di che, è possibile dare un'occhiata a mod_deflate - almeno, se si utilizza Apache 2.

tutti i file sul mio sito vengono caricate (incluso) attraverso il file indice

È davvero necessario? Stai facendo funzionare PHP senza apparente (?) Motivo, in questo modo.
(Si noti che anche se i file CSS/JS vengono serviti tramite PHP, Apache dovrebbe essere in grado di comprimerli con mod_deflate; lo stesso vale anche per HTML, JSON, ...btw)

Un altro vantaggio di non passare attraverso PHP al server i file è che sarebbe stato più facile per farli serviti da un altro server, come il vostro sito crescerà (se cresce abbastanza, in realtà):

  • potresti avere un sacco di "server PHP", per elaborare pagine PHP
  • e uno o due "server file statici", solo server CSS/JS/immagini e alleggerire il carico oi tuoi "server applicazioni" ; non c'è bisogno di PHP su questi; si potrebbe anche usare qualcosa come lighttpd invece di Apache


Detto questo, ob_start dice questo:

buffer di uscita sono impilabili, cioè, è possibile chiamare ob_start(), mentre un altro ob_start() è attivo. Assicurati semplicemente di che chiami ob_end_flush() il numero appropriato di volte . Se le funzioni di richiamata di uscita multiple sono attive, l'output viene filtrato in sequenza attraverso ognuno di essi nell'ordine di nidificazione .

Quindi, credo che la risposta alla tua domanda è "sì" :-)

+0

Grazie per le informazioni e sì, ho intenzione di utilizzare lighthttpd per le immagini eventualmente per includere i file nel mio indice, lo faccio; $ pageId ['account.profile.settingsBETA'] = 'member/account.profile.settingsBETA.php'; mi è facile tenere traccia di tutte le pagine, molti siti lo fanno, non è buono? – JasonDavis

+0

L'indice include fondamentalmente un file di intestazione, quindi include il corpo da ciò che ho postato sopra questo, quindi include il footer – JasonDavis

+0

OK su quello per i file PHP; ma lo stai facendo anche per i file CSS? (o non ho capito cosa hai detto prima) –

Problemi correlati