Funzione PHP header_remove(): Tutto Quello che Devi Sapere
Come sviluppatore PHP, potresti dover manipolare gli header HTTP nella tua applicazione web. La funzione header_remove() è uno strumento potente.
Ogni risposta PHP include un insieme di header HTTP — i metadati che il browser legge prima ancora di vedere il contenuto della pagina (tipo di contenuto, regole di caching, cookie, redirect e così via). A volte si imposta un header in una parte iniziale dello script e in seguito si decide che non deve essere inviato. header_remove() è la funzione integrata che consente di rimuovere un header dalla risposta in uscita prima che venga inviato al client.
Questo capitolo tratta la sintassi, il parametro opzionale, quando la rimozione è effettivamente possibile e i casi d'uso più comuni.
Cosa fa header_remove()
header_remove() elimina un header precedentemente accodato con header() (o impostato automaticamente da PHP) dall'elenco degli header che verranno inviati con la risposta. Poiché PHP bufferizza gli header finché il corpo non inizia lo streaming, è possibile aggiungerli e rimuoverli liberamente fino a quel momento.
La funzione agisce sull'elenco degli header in uscita, non sugli header della richiesta che lo script ha ricevuto dal browser.
Sintassi
header_remove(?string $name = null): void$name— il nome dell'header da rimuovere (senza distinzione tra maiuscole e minuscole, senza i due punti o il valore), ad esempio"X-Powered-By". Il parametro è opzionale. Se viene omesso (o si passanull), vengono rimossi tutti gli header impostati fino a quel momento.- Valore restituito — nessuno (
void).
Rimozione di un Singolo Header
<?php
header("X-MyHeader: Hello World!");
header_remove("X-MyHeader");In questo caso l'header X-MyHeader viene accodato e poi rimosso, quindi non raggiunge mai il browser. Il nome dell'header viene confrontato senza distinzione tra maiuscole e minuscole, quindi header_remove("x-myheader") rimuoverebbe lo stesso header.
Rimozione di Tutti gli Header
Chiamare la funzione senza argomenti per eliminare tutti gli header accodati:
<?php
header("X-First: 1");
header("X-Second: 2");
header_remove(); // both X-First and X-Second are droppedQuesto elimina anche gli header che PHP aggiungerebbe altrimenti (come X-Powered-By, se abilitato), che è uno degli usi più comuni nel mondo reale — rimuovere l'impronta digitale del server prima che l'output inizi.
Quando la Rimozione Funziona
Gli header possono essere modificati solo prima che venga inviato qualsiasi output. Non appena il primo byte del corpo lascia lo script — tramite echo, print, spazi bianchi prima di <?php, o un ?> di chiusura seguito da una riga vuota — gli header vengono inviati e bloccati.
Usa headers_sent() per verificare se è ancora sicuro modificare gli header, e headers_list() per ispezionare gli header attualmente in coda:
<?php
header("X-Debug: on");
if (!headers_sent()) {
header_remove("X-Debug");
}
print_r(headers_list()); // X-Debug is no longer in the listSe l'output è già iniziato, header_remove() non fa nulla e PHP emette un avviso "headers already sent", esattamente come farebbe header().
Casi d'Uso Comuni
- Nascondere l'impronta del server. Rimuovere
X-Powered-Byin modo che le risposte non pubblicizzino la versione PHP in uso. - Annullare un header condizionale. Accodare un header di caching o di redirect in anticipo, poi eliminarlo se una condizione successiva cambia il comportamento desiderato.
- Reset prima di un redirect pulito. Eliminare gli header superflui prima di emettere un nuovo
header("Location: ...").
Conclusione
header_remove() offre un controllo preciso sulla risposta HTTP in uscita: si passa un nome per eliminare un singolo header, oppure si chiama senza argomenti per cancellarli tutti. Abbinala a headers_sent() e headers_list() per modificare gli header solo quando è ancora consentito, e potrai determinare con certezza esattamente cosa riceve il browser.