2010-04-03 19 views
9

Para permitir el almacenamiento en caché de un archivo generado PHP, quiero asegurarme de que el encabezado 'Pragma: no-cache' es no establecido. Sin embargo, ¿cómo elimino un encabezado posiblemente ya configurado?Eliminar un encabezado en PHP

Es decir, se podría ser posible, que en algún lugar en el código alguien escribió header('Pragma: no-cache'); y ahora quiere asegurarse, la cabecera no se envía.

¿Es suficiente para hacer esto:

header('Pragma:'); 

o hay algo así como delete_header() (lo que, al parecer, ser indocumentado o bien escondido)?

+2

Dado que PHP es un software de código abierto, sería una tontería tener algo "indocumentado y bien escondido" allí. – selfawaresoup

+3

@Techpriester: Sé que docenas de proyectos de sistema operativo completamente indocumentados, y bien ocultos también pueden ser involuntarios. – Boldewyn

Respuesta

13

header_remove() a partir de PHP 5.3

header_register_callback() también estará disponible muy pronto

+0

Genial, gracias. Es una lástima que los chicos de PHP pensaran en esto recientemente (después de todo, el manejo de HTTP es un área de aplicación central de PHP). – Boldewyn

+4

¿Cuáles son las soluciones para antes de php 5.3? Actualmente tengo PHP/5.2.17 – Pacerier

+0

@Pacerier para php <5.3.0 "header ('Pragma:');" hace el trabajo. El navegador no recibe ningún encabezado 'Pragma' (incluso en blanco). – maliayas

2

Puede anular una cabecera establecido previamente pasando un segundo argumento para header():

void header (string $string [, bool $replace = true [, int $http_response_code ]]) 

Compruebe el manual for header()

+0

Lo sé, pero la pregunta es, si esto es suficiente, es decir, si proporciona solo 'Pragma:' para el encabezado() lo borrará de la lista de enviados. – Boldewyn

+1

@Boldewyn No, no lo borrará de la lista de enviados. Lo anularía sin ningún valor, lo que significa que aunque el resultado previsto es el mismo, estamos enviando bytes innecesarios ya que todavía tendremos que enviar la cadena "Pragma:" por el cable. – Pacerier

1

Los comportamientos de los encabezados 'pragma' no están definidos por la especificación, a pesar de Dely cree que enviar un encabezado 'Pragma: No-cache' tendrá algún efecto en el navegador, de hecho es casi universalmente ignorado (y nunca lo devuelve ninguna instalación de php que he usado).

Decirle al navegador NO caché el contenido se hace a través de un encabezado caducado con una fecha pasada, un encabezado Cache-Control con un valor sin caché o (si quiere ser astuto) por un 'Varía : Encabezado de fecha '. En ausencia de cualquiera de estos tipos de encabezado, el cliente no debe almacenar en caché la página.

Por el contrario, si desea que una página sea almacenable en caché, establezca los caducientes y los encabezados de caché y control.

C.

+0

Esto no responde la pregunta .. La pregunta es sobre "Eliminar un encabezado en PHP" no sobre cómo implementar el almacenamiento en caché. – Pacerier

+1

No, ese es el título de la pregunta; sin embargo, lo que el OP intenta lograr es hacer que el contenido sea almacenable; eliminar un encabezado pragma no tiene relevancia en este – symcbean

+0

; la pregunta es "¿cómo elimino un encabezado posiblemente ya configurado?" – Pacerier

3

Sé que esta pregunta es vieja y ya respondida. Pero algunas de las respuestas podrían dejar a la gente con la impresión equivocada. Tenga la seguridad de que si sus encabezados de respuesta contienen Pragma: no-cache, de hecho impedirá que un navegador web guarde en caché un recurso, independientemente de otras configuraciones.

Por supuesto, si está utilizando al menos PHP 5.3, puede eliminar el encabezado Pragma usando header_remove('Pragma');.

Cuestiones relacionadas