Función PHP header_remove(): Todo lo que necesitas saber
Como desarrollador PHP, puedes necesitar manipular cabeceras HTTP en tu aplicación web. La función header_remove() te permite eliminarlas.
Cada respuesta PHP lleva un conjunto de cabeceras HTTP — los metadatos que el navegador lee antes de ver el contenido de tu página (tipo de contenido, reglas de caché, cookies, redirecciones, etc.). A veces defines una cabecera al inicio de un script y luego decides que no debe enviarse. header_remove() es la función integrada que retira una cabecera de la respuesta saliente antes de que se envíe al cliente.
Este capítulo cubre la sintaxis, el parámetro opcional, cuándo funciona realmente la eliminación y los motivos habituales por los que recurrirías a ella.
Qué hace header_remove()
header_remove() elimina una cabecera que fue previamente encolada con header() (o configurada automáticamente por PHP) de la lista de cabeceras que se enviarán con la respuesta. Como PHP almacena en búfer las cabeceras hasta que comienza a transmitirse el cuerpo, puedes agregarlas y eliminarlas libremente hasta ese momento.
La función actúa sobre la lista de cabeceras salientes, no sobre las cabeceras de solicitud que tu script recibió del navegador.
Sintaxis
header_remove(?string $name = null): void$name— el nombre de la cabecera a eliminar (insensible a mayúsculas, sin los dos puntos ni el valor), por ejemplo"X-Powered-By". El parámetro es opcional. Si lo omites (o pasasnull), se eliminan todas las cabeceras configuradas hasta ese momento.- Valor de retorno — ninguno (
void).
Eliminar una sola cabecera
<?php
header("X-MyHeader: Hello World!");
header_remove("X-MyHeader");Aquí la cabecera X-MyHeader se encola y luego se elimina, por lo que nunca llega al navegador. El nombre de la cabecera se compara sin distinguir mayúsculas de minúsculas, así que header_remove("x-myheader") eliminaría la misma cabecera.
Eliminar todas las cabeceras
Llama a la función sin argumento para borrar todas las cabeceras encoladas:
<?php
header("X-First: 1");
header("X-Second: 2");
header_remove(); // both X-First and X-Second are droppedEsto también elimina las cabeceras que PHP añadiría de otro modo (como X-Powered-By, si está habilitada), lo cual es uno de los usos más comunes en el mundo real: eliminar la huella del servidor antes de que comience la salida.
Cuándo funciona la eliminación
Las cabeceras solo pueden modificarse antes de que se envíe cualquier salida. Una vez que el primer byte del cuerpo sale del script — mediante echo, print, espacios en blanco antes de <?php, o un cierre ?> seguido de una línea en blanco — las cabeceras se vacían y quedan bloqueadas.
Usa headers_sent() para comprobar si todavía es seguro modificar cabeceras, y headers_list() para inspeccionar las cabeceras actualmente encoladas:
<?php
header("X-Debug: on");
if (!headers_sent()) {
header_remove("X-Debug");
}
print_r(headers_list()); // X-Debug is no longer in the listSi la salida ya ha comenzado, header_remove() no hace nada y PHP emite una advertencia de "headers already sent", igual que haría header().
Casos de uso habituales
- Ocultar la huella del servidor. Eliminar
X-Powered-Bypara que las respuestas no anuncien tu versión de PHP. - Deshacer una cabecera condicional. Encolar una cabecera de caché o redirección al inicio y luego descartarla si una condición posterior cambia tu decisión.
- Restablecer antes de una redirección limpia. Limpiar cabeceras residuales antes de emitir un nuevo
header("Location: ...").
Conclusión
header_remove() te brinda un control preciso sobre la respuesta HTTP saliente: pasa un nombre para eliminar una sola cabecera, o llámala sin argumento para borrarlas todas. Combínala con headers_sent() y headers_list() para modificar cabeceras solo mientras está permitido, y podrás definir con confianza exactamente lo que recibe el navegador.