2009-07-29 18 views
7

¿Se puede llamar al ob_start de PHP más de una vez?¿Se puede llamar al ob_start de PHP más de una vez?

Lo siento si esta es una pregunta tonta, pero realmente no lo sé.

Mi sitio es realmente grande (cantidad de archivos), es una red social y uno de los archivos incluidos usa ob_start El búfer de salida de PHP para algo, no soy alguien más que comenzó mi sitio hace mucho tiempo y ahora es el mío, necesito analizarlo más para ver qué está haciendo exactamente.

De todos modos, quiero usar ob_start ("ob_gzhandler"); comprimir archivos CSS y todos los archivos en mi sitio se cargan (incluidos) a través del archivo de índice, así que quiero saber si puedo usarlo aunque ya esté en uso en otro lugar del código.

Respuesta

15

Sí, puede llamarlo más de una vez. Sin embargo, crea un nuevo buffer cada vez, así que ten cuidado.

De los manual: "buffers de salida son apilables, es decir, puede llamar ob_start(), mientras que otro ob_start() está activo Sólo asegúrese de que usted llama ob_end_flush() el número de veces apropiado Si devolución de llamada de salida múltiple.. las funciones están activas, la salida se filtra secuencialmente a través de cada una de ellas en orden de anidación ".

+0

Gracias y como he mencionado que ya se llama en mi script que necesito para localizar y ver si ob_end_flush() es aún llamado, si no es lo que esto causaría? – JasonDavis

+0

Quién sabe, podría intentarlo. –

+1

Los búfers de salida se vacían al final de la ejecución del script si no lo ha hecho usted mismo con 'ob_flush()' o 'ob_end_flush()'. Sin embargo, si tiene varios búferes anidados y espera procesar sus contenidos en un orden particular, entonces puede ver resultados extraños. – zombat

2

Usted dice esto:

que estoy queriendo utilizar ob_start ("ob_gzhandler"); para comprimir CSS archivos

yo preferiría servir y comprimir JS/CSS (bueno, estáticos) archivos es la trabajo del servidor web (es decir, Apache), y no PHP.

Sobre eso, se puede echar un vistazo a mod_deflate - al menos, si está utilizando Apache 2.

todos los archivos en mi sitio se cargan (incluido) a través del archivo de índice

¿Es realmente necesario? Está haciendo que PHP funcione sin una razón aparente (?), De esa manera.
(Tenga en cuenta que incluso si los archivos CSS/JS se sirven a través de PHP, Apache debería ser capaz de comprimirlos con mod_deflate; lo mismo es cierto para HTML, JSON, ...por cierto)

Otra ventaja de no ir a través de PHP con el servidor esos archivos es que sería más fácil de conseguir que se sirven por otro servidor, ya que su sitio va a crecer (si crece lo suficiente, en realidad):

  • podría tener un montón de "servidores PHP", para procesar las páginas PHP
  • y uno o dos "servidores de archivos estáticos", para servidores solo CSS/JS/images, y aligerar la carga o sus "servidores de aplicaciones" ; no hay necesidad de PHP en estos; también se puede usar algo como lighttpd en lugar de Apache


Dicho esto, ob_start dice esto:

buffers de salida son apilables, es decir, puede llamar ob_start(), mientras que otro ob_start() está activo. Solo asegúrese de al que llama ob_end_flush() el cantidad apropiada de veces. Si funciones de devolución de llamada múltiple están activas, la salida se filtra secuencialmente a través de cada una de ellas en el orden de anidación .

Por lo tanto, creo que la respuesta a su pregunta es "sí" :-)

+0

Gracias por la información y sí planeo usar lighthttpd para las imágenes con el fin de incluir archivos a través de mi índice, lo hago; $ pageId ['account.profile.settingsBETA'] = 'member/account.profile.settingsBETA.php'; me facilita el seguimiento de todas las páginas, muchos sitios lo hacen, ¿no es bueno? – JasonDavis

+0

El índice incluye básicamente un archivo de encabezado, luego incluye el cuerpo de lo que publiqué arriba, luego incluye el pie de página – JasonDavis

+0

OK sobre eso para archivos PHP; pero lo haces también para archivos CSS? (o no entendí lo que dijiste primero) –

Cuestiones relacionadas