Chi ha lavorato in php sicuramente nel suo cammino di programmazione avrà incontrato questo messaggio di errore:
“Cannot modify header information – headers already sent by”
E’ un classico: ogni linguaggio ha la sua peculiarità. In php la vera croce è questo. Traduciamo il messaggio: il sig. PHP pretende che qualsiasi informazione di tipo header (quelle che fisicamente vanno scritte nei messaggi che server e client [browser] si scambiano) sia scritta nel codice prima di qualsiasi output HTML.
Come si risolve questa cosa: strutturando bene la programmazione, oppure usando un sistema a buffer, che incamera l’HTML che “disordinatamente” è stato iniettato in mezzo ai comandi server e lo “sputa” fuori tutto alla fine.
Cosa succede però se tutte le cose sono al loro posto, peggio ancora se avete un framework di base alla programmazione (wordpress compreso!) e non trovate una soluzione? A me un aiuto fondamentale l’ha dato Massimo della Rovere, che con minuziosità e dose di esperienza massiccia ha individuato l’errore.
Avevo messo in output qualcosa nel punto sbagliato? Risposta: NO.
C’era qualcosa in output nel punto sbagliato? Risposta: SI.
Sono diventato pazzo? Risposta: NO!
Semplicemente l’editor che avevo usato per modificare alcuni file del mio template personalizzato aveva pensato bene di cambiare l’encoding del mio file. Nativamente i file di WordPress sono tutti codificati ANSI. I propri file va bene anche codificarli UTF-8, ma quale? Qui è la soluzione: UTF-8 senza BOM va bene, UTF-8 col BOM si traduce in uno stronzissimo Byte che viene sputato in output, fuori controllo, prima dell’header e che diventa un errore “Introvabile”!!!
Il BOM infatti è proprio una sequenza di BYTE in testa al file, che consente di dare informazioni immediate sulla codifica del file, ovvero sul tipo di UTF utilizzato. Scopro ora che nella scheda Wikipedia è espressamente citato il caso PHP!