Come correggere l'errore "Intestazioni già inviate" in PHP


831

Quando eseguo il mio script, ricevo diversi errori come questo:

Avvertenza: impossibile modificare le informazioni dell'intestazione - intestazioni già inviate da ( output avviato a /some/file.php:12 ) in /some/file.php sulla riga 23

Le linee menzionate nei messaggi di errore contengono header()e setcookie()chiamano.

Quale potrebbe essere la ragione di ciò? E come ripararlo?



Assicurati che non venga emesso alcun testo ( ob_starte che ob_end_clean() possa rivelarsi utile qui). È quindi possibile impostare un cookie o una sessione uguale a ob_get_contents()e quindi utilizzare ob_end_clean()per cancellare il buffer.
Jack Tuck,

Usa la safeRedirectfunzione nella mia libreria PHP: github.com/heinkasner/PHP-Library/blob/master/extra.php
heinkasner

5
~~~~~~~~~~ Il tuo file ENCODING non dovrebbe essere UTF-8, ma UTF-8 (Without BOM)~~~~~~~~~~~
T.Todua,

Risposte:


2998

Nessun output prima di inviare le intestazioni!

Le funzioni che inviano / modificano le intestazioni HTTP devono essere invocate prima di effettuare qualsiasi output . summary ⇊ Altrimenti la chiamata fallisce:

Avvertenza: impossibile modificare le informazioni dell'intestazione - intestazioni già inviate (output avviato dallo script: riga )

Alcune funzioni che modificano l'intestazione HTTP sono:

L'output può essere:

  • Intenzionale:

    • print, echoE altre funzioni di uscita producendo
    • Prime <html>sezioni prima <?phpdi codice.

Perché succede?

Per capire perché le intestazioni devono essere inviate prima dell'output, è necessario esaminare una tipica risposta HTTP . Gli script PHP generano principalmente contenuto HTML, ma trasmettono anche un set di intestazioni HTTP / CGI al server web:

HTTP/1.1 200 OK
Powered-By: PHP/5.3.7
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8

<html><head><title>PHP page output page</title></head>
<body><h1>Content</h1> <p>Some more output follows...</p>
and <a href="/"> <img src=internal-icon-delayed> </a>

La pagina / output segue sempre le intestazioni. PHP deve prima passare le intestazioni al server web. Può farlo solo una volta. Dopo la doppia interruzione di riga non può più modificarli.

Quando PHP riceve la prima uscita ( print, echo, <html>) sarà svuotare tutte le intestazioni raccolti. Successivamente può inviare tutto l'output che desidera. Ma inviare ulteriori intestazioni HTTP è impossibile allora.

Come puoi scoprire dove si è verificato l'output prematuro?

L' header()avviso contiene tutte le informazioni utili per individuare la causa del problema:

Avvertenza: impossibile modificare le informazioni dell'intestazione - intestazioni già inviate da (output avviato a / www / usr2345 / htdocs / auth.php: 52 ) in /www/usr2345/htdocs/index.php sulla riga 100

Qui "riga 100" si riferisce allo script in cui l' header() invocazione non è riuscita.

La nota " output iniziato alle " tra parentesi è più significativa. Indica la fonte dell'output precedente. In questo esempio è auth.php e linea52 . È lì che dovevi cercare risultati prematuri.

Cause tipiche:

  1. Stampa, eco

    L'output intenzionale da printe le echoistruzioni terminerà l'opportunità di inviare le intestazioni HTTP. Il flusso dell'applicazione deve essere ristrutturato per evitarlo. Usa funzioni e schemi di template. Assicurarsi che le header()chiamate avvengano prima che i messaggi vengano scritti.

    Le funzioni che producono output includono

    • print, echo, printf,vprintf
    • trigger_error, ob_flush, ob_end_flush, var_dump,print_r
    • readfile, passthru, flush, imagepng,imagejpeg


    tra l'altro e funzioni definite dall'utente.

  2. Aree HTML non elaborate

    Anche le sezioni HTML non analizzate in un .phpfile vengono emesse direttamente. Condizioni di script che attiveranno una header()chiamata è necessario rispettare, prima di qualsiasi prime <html>blocchi.

    <!DOCTYPE html>
    <?php
        // Too late for headers already.

    Utilizzare uno schema di modello per separare l'elaborazione dalla logica di output.

    • Posiziona il codice di elaborazione del modulo in cima agli script.
    • Utilizzare variabili di stringa temporanee per rinviare i messaggi.
    • La logica di output effettiva e l'output HTML mescolato devono seguire per ultimi.

  3. Spazio prima <?phpper gli avvisi "script.php linea 1 "

    Se l'avvertimento si riferisce all'output in linea 1, allora è principalmente spazio bianco , testo o HTML prima del <?phptoken di apertura .

     <?php
    # There's a SINGLE space/newline before <? - Which already seals it.

    Allo stesso modo può verificarsi per gli script o le sezioni di script aggiunti:

    ?>
    
    <?php

    PHP in realtà mangia una singola interruzione di riga dopo aver chiuso i tag. Ma non compenserà più newline o tab o spazi spostati in tali spazi vuoti.

  4. UTF-8 BOM

    Le interruzioni di riga e gli spazi da soli possono essere un problema. Ma ci sono anche sequenze di caratteri "invisibili" che possono causare questo. Il più famoso è la BOM UTF-8 (Byte-Order-Mark) che non viene visualizzata dalla maggior parte degli editor di testo. È la sequenza di byte EF BB BF, che è facoltativa e ridondante per i documenti codificati UTF-8. PHP deve tuttavia trattarlo come output non elaborato. Può apparire come i caratteri nell'output (se il client interpreta il documento come Latin-1) o simile "spazzatura".

    In particolare gli editor grafici e gli IDE basati su Java sono ignari della sua presenza. Non lo visualizzano (obbligato dallo standard Unicode). La maggior parte dei programmatori e degli editor di console tuttavia fanno:

    si unisce all'editor che mostra il segnaposto della distinta base UTF-8 e all'editor MC un punto

    Lì è facile riconoscere il problema all'inizio. Altri editor possono identificare la sua presenza in un menu file / impostazioni (Notepad ++ su Windows può identificare e risolvere il problema ). Un'altra opzione per controllare la presenza delle distinte materiali è ricorrere a un hexeditor . Sui sistemi * nix hexdumpè generalmente disponibile, se non una variante grafica che semplifica il controllo di questi e altri problemi:

    hexeditor beav mostrando utf-8 bom

    Una soluzione semplice è impostare l'editor di testo per salvare i file come "UTF-8 (no BOM)" o simile nomenclatura simile. Spesso i nuovi arrivati ​​ricorrono altrimenti alla creazione di nuovi file e alla semplice copia e incolla del codice precedente.

    Utilità di correzione

    Esistono anche strumenti automatizzati per esaminare e riscrivere file di testo ( sed/awk o recode). Per PHP in particolare c'è il phptagstag tidier . Riscrive i tag di chiusura e apertura in forme lunghe e brevi, ma risolve facilmente anche i problemi di spazi bianchi, Unicode e BOM di Unicode e UTF-x:

    phptags  --whitespace  *.php

    È consigliabile utilizzarlo su un'intera directory di inclusione o progetto.

  5. Spazio bianco dopo ?>

    Se l'origine dell'errore viene indicata come dietro la chiusura,?> è qui che vengono scritti alcuni spazi bianchi o testo non elaborato. Il marker di fine PHP non termina l'esecuzione dello script a questo punto. Qualsiasi carattere di testo / spazio dopo verrà scritto come contenuto della pagina.

    È comunemente consigliato, in particolare ai nuovi arrivati, che i ?>tag di chiusura PHP finali dovrebbero essere omessi. Ciò evita una piccola parte di questi casi. (Molto spesso gli include()dscript sono il colpevole.)

  6. Origine errore indicata come "Sconosciuto sulla riga 0"

    In genere è un'estensione PHP o un'impostazione php.ini se non viene concretizzata alcuna fonte di errore.

    • Occasionalmente è l' gzipimpostazione di codifica dello stream oob_gzhandler .
    • Ma potrebbe anche essere qualsiasi extension=modulo doppiamente caricato che genera un messaggio di avvio / avviso PHP implicito.

  7. Messaggi di errore precedenti

    Se un'altra istruzione o espressione PHP provoca la stampa di un messaggio di avviso o di un avviso, anche questo viene considerato come output prematuro.

    In questo caso è necessario evitare l'errore, ritardare l'esecuzione dell'istruzione o sopprimere il messaggio con es. isset()O @()- quando uno dei due non ostacola il debug in seguito.

Nessun messaggio di errore

Se hai error_reportingo display_errorsdisabilitato per php.ini, quindi non verrà visualizzato alcun avviso. Ignorare gli errori non risolverà il problema. Le intestazioni non possono ancora essere inviate dopo un output prematuro.

Quindi, quando i header("Location: ...")reindirizzamenti falliscono silenziosamente, è consigliabile sondare gli avvisi. Riattivarli con due semplici comandi in cima allo script di invocazione:

error_reporting(E_ALL);
ini_set("display_errors", 1);

O set_error_handler("var_dump");se tutto il resto fallisce.

Parlando di intestazioni di reindirizzamento, dovresti spesso usare un linguaggio come questo per i percorsi del codice finale:

exit(header("Location: /finished.html"));

Preferibilmente anche una funzione di utilità, che stampa un messaggio utente in caso di header()guasti.

Buffering dell'output come soluzione alternativa

Il buffering dell'output di PHP è una soluzione alternativa per alleviare questo problema. Spesso funziona in modo affidabile, ma non deve sostituire la corretta strutturazione dell'applicazione e la separazione dell'output dalla logica di controllo. Il suo vero scopo è ridurre al minimo i trasferimenti in blocco al server web.

  1. L' output_buffering= impostazione può comunque aiutare. Configuralo in php.ini o tramite .htaccess o anche .user.ini su moderne configurazioni FPM / FastCGI.
    Abilitarlo consentirà a PHP di bufferizzare l'output invece di passarlo istantaneamente al server web. PHP può quindi aggregare le intestazioni HTTP.

  2. Allo stesso modo può essere impegnato con una chiamata in ob_start(); cima allo script di invocazione. Che tuttavia è meno affidabile per diversi motivi:

    • Anche se <?php ob_start(); ?>avvia il primo script, gli spazi bianchi o una DBA potrebbero essere mescolati prima, rendendolo inefficace .

    • Può nascondere spazi bianchi per l'output HTML. Ma non appena la logica dell'applicazione tenta di inviare contenuto binario (ad esempio un'immagine generata), l'output esterno bufferizzato diventa un problema. (Necessitante ob_clean() come soluzione alternativa più lontana.)

    • Il buffer ha dimensioni limitate e può essere facilmente superato se lasciato alle impostazioni predefinite. E non è nemmeno un caso raro, difficile da rintracciare quando succede.

Entrambi gli approcci pertanto potrebbero diventare inaffidabili, in particolare quando si passa da configurazioni di sviluppo e / o server di produzione. Questo è il motivo per cui il buffering dell'output è ampiamente considerato solo una stampella / rigorosamente una soluzione alternativa.

Vedi anche l' esempio di utilizzo di base nel manuale e per ulteriori pro e contro:

Ma ha funzionato sull'altro server !?

Se non hai ricevuto prima le avvertenze delle intestazioni, l' impostazione php.ini del buffering dell'output è cambiata. Probabilmente non è configurato sul server attuale / nuovo.

Verifica con headers_sent()

Puoi sempre usare headers_sent()per sondare se è ancora possibile ... inviare intestazioni. Ciò è utile per stampare in modo condizionale un'informazione o applicare un'altra logica di fallback.

if (headers_sent()) {
    die("Redirect failed. Please click on this link: <a href=...>");
}
else{
    exit(header("Location: /user.php"));
}

Le soluzioni utili di fallback sono:

  • <meta>Tag HTML

    Se l'applicazione è strutturalmente difficile da correggere, un modo semplice (ma un po 'poco professionale) per consentire i reindirizzamenti è l'iniezione di un <meta>tag HTML . Un reindirizzamento può essere ottenuto con:

     <meta http-equiv="Location" content="http://example.com/">

    O con un breve ritardo:

     <meta http-equiv="Refresh" content="2; url=../target.html">

    Questo porta a HTML non valido se utilizzato oltre la <head>sezione. La maggior parte dei browser lo accetta ancora.

  • Reindirizzamento JavaScript

    In alternativa, è possibile utilizzare un reindirizzamento JavaScript per i reindirizzamenti di pagina:

     <script> location.replace("target.html"); </script>

    Sebbene questo sia spesso più conforme all'HTML della <meta>soluzione alternativa, fa affidamento su client abilitati per JavaScript.

Entrambi gli approcci rendono comunque accettabili fallback quando le autentiche chiamate dell'intestazione HTTP () falliscono. Idealmente dovresti sempre combinarlo con un messaggio intuitivo e un link cliccabile come ultima risorsa. (Che ad esempio è ciò che fa l' estensione http_redirect () PECL.)

Perché setcookie()e session_start()sono anche interessati

Entrambi setcookie()e session_start()devono inviare Set-Cookie:un'intestazione HTTP. Si applicano quindi le stesse condizioni e messaggi di errore simili verranno generati per situazioni di output prematuro.

(Naturalmente sono inoltre interessati dai cookie disabilitati nel browser o persino dai problemi del proxy. La funzionalità della sessione ovviamente dipende anche dallo spazio libero su disco e da altre impostazioni di php.ini, ecc.)

Ulteriori collegamenti


Anche il normale notepad.exe è complicato. Uso NetBeans normalmente che non aggiunge DBA, anche se il file è codificato in questo modo. La modifica di un file in seguito nel blocco note rovina le cose, specialmente verso IIS come server web. Sembra che Apache scarti la distinta base (aggiunta intenzionalmente).
Teson,

4
Rimuovere la chiusura ?>dalla fine di un file php è di solito una buona pratica che aiuta a minimizzare anche questi errori. Gli spazi bianchi non desiderati non si verificano alla fine dei file e in seguito sarà comunque possibile aggiungere intestazioni alla risposta. È anche utile se si utilizza il buffering di output e non si desidera visualizzare spazi bianchi indesiderati alla fine delle parti generate dai file inclusi.
Nikita 웃

Strano, ho spostato il mio file da cPanel Linux Hosting a VPS. Prima funzionava correttamente ma qui mostrava questo errore (avevo un po 'di codice HTML prima dell'intestazione). Perché?
Pablo Escobar,

@Purushotamrawat Hai letto la parte " Ma ha funzionato sull'altro server !? "
mario

1
@PeterSMcIntyre Presumibilmente la distinta base UTF8 (correggilo) / nessun buffering di output abilitato (non fare affidamento su questo).
mario

199

Questo messaggio di errore viene attivato quando viene inviato qualcosa prima di inviare le intestazioni HTTP (con setcookieo header). I motivi comuni per cui viene emesso qualcosa prima delle intestazioni HTTP sono:

  • Spazi bianchi accidentali, spesso all'inizio o alla fine dei file, in questo modo:

     <?php
    // Note the space before "<?php"
    ?>

       Per evitare ciò, è sufficiente lasciare fuori la chiusura ?>- non è richiesto comunque.

  • Contrassegni di byte all'inizio di un file php. Esamina i tuoi file php con un editor esadecimale per scoprire se è così. Dovrebbero iniziare con i byte 3F 3C. È possibile rimuovere la distinta componenti in modo sicuro EF BB BFdall'inizio dei file.
  • Uscita esplicito, ad esempio chiamate echo, printf, readfile, passthru, codice prima <?etc.
  • Un avviso emesso da php, se la display_errorsproprietà php.ini è impostata. Invece di andare in crash per un errore del programmatore, php corregge silenziosamente l'errore ed emette un avviso. Mentre puoi modificare le configurazioni display_errorso error_reporting , dovresti piuttosto risolvere il problema.
    Motivi comuni sono gli accessi agli elementi non definiti di un array (come $_POST['input']senza usare emptyo issetper verificare se l'input è impostato) o usare una costante indefinita invece di una stringa letterale (come in $_POST[input], notare le virgolette mancanti).

L'attivazione del buffering di output dovrebbe eliminare il problema; tutto l'output dopo la chiamata a ob_startviene memorizzato nel buffer fino a quando non si rilascia il buffer, ad es ob_end_flush. con .

Tuttavia, mentre il buffering dell'output evita i problemi, dovresti davvero determinare perché l'applicazione genera un corpo HTTP prima dell'intestazione HTTP. Sarebbe come fare una telefonata e discutere della tua giornata e del tempo prima di dire al chiamante che ha il numero sbagliato.


mi aiuta grazie
Vishwa Pratap il

122

Ho ricevuto questo errore molte volte prima, e sono certo che tutti i programmatori PHP hanno ricevuto questo errore almeno una volta prima.

Possibile soluzione 1

Questo errore potrebbe essere stato causato dagli spazi vuoti prima dell'inizio del file o dopo la fine del file. Questi spazi vuoti non dovrebbero essere qui.

ex) NON DOVREBBE ESSERE NESSUN SPAZIO IN BIANCO QUI

   echo "your code here";

?>
THERE SHOULD BE NO BLANK SPACES HERE

Controlla tutti i file associati al file che causa questo errore.

Nota: a volte EDITOR (IDE) come gedit (un editor linux predefinito) aggiunge una riga vuota sul file di salvataggio. Questo non dovrebbe succedere. Se stai usando Linux. puoi usare l'editor VI per rimuovere spazio / linee dopo?> alla fine della pagina.

Possibile soluzione 2: in caso contrario, utilizzare ob_start per generare il buffering:

<?php
  ob_start();

  // code 

 ob_end_flush();
?> 

Ciò attiverà il buffering dell'output e le intestazioni verranno create dopo il buffering della pagina.


18
ob_start()nasconde solo il problema; non usarlo per risolvere questo particolare problema.
Ja͢ck,

@ Ja͢ck Se non lo uso ob_start(), allora cosa dovrei fare per risolvere questo problema:Headers already sent
Shafizadeh,

@Sajad se ricevi l'errore in modo specifico a causa dell'editor che stai utilizzando, dovresti armeggiare con le impostazioni per evitare che causi il problema o cambiare editor. Se ricevi l'errore per qualsiasi altro motivo, dovresti leggere le risposte a questa domanda (in particolare la risposta accettata) per capire quale sia effettivamente il problema e risolverlo.
Samsquanch,

3
ob_start()non "nasconde" il problema, risolve il problema.
TMS

1
Ho avuto un tale problema quando ho caricato i miei file sul server, che supportava anche PHP5.3 Usa il server con PHP 5.6 o più
GGSoft

86

Invece della riga sotto

//header("Location:".ADMIN_URL."/index.php");

Scrivi

echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");

o

?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php

Risolverà sicuramente il tuo problema. Ho riscontrato lo stesso problema ma ho risolto scrivendo la posizione dell'intestazione nel modo sopra.


41

Tu fai

printf ("Hi %s,</br />", $name);

prima di impostare i cookie, il che non è consentito. Non è possibile inviare alcun output prima delle intestazioni, nemmeno una riga vuota.


32

È a causa di questa linea:

printf ("Hi %s,</br />", $name);

Non è necessario stampare / echo nulla prima di inviare le intestazioni.


31

PROBLEMI COMUNI:

(copiato da: fonte )

====================

1) non ci dovrebbe essere alcun output (cioè echo..o codici HTML) prima delheader(.......); comando.

2) rimuovere qualsiasi spazio bianco (o newline ) prima <?phpe dopo?> tag.

3) REGOLA D'ORO! - controlla se quel file php (e anche, se hai includealtri file) ha UTF8 senza codifica BOM (e non solo UTF-8 ). Questo è un problema in molti casi (perché UTF8 file codificato ha un carattere speciale all'inizio del file php, che il tuo editor di testo non mostra) !!!!!!!!!!!

4) Dopo header(...);è necessario utilizzareexit;

5) utilizzare sempre il riferimento 301 o 302:

header("location: http://example.com",  true,  301 );  exit;

6) Attiva la segnalazione errori e trova l'errore. Il tuo errore può essere causato da una funzione che non funziona. Quando attivi la segnalazione degli errori, dovresti sempre correggere prima l'errore più elevato. Ad esempio, potrebbe essere "Avviso: date_default_timezone_get (): non è sicuro fare affidamento sulle impostazioni del fuso orario del sistema." - poi più in basso potresti visualizzare l'errore "intestazioni non inviate". Dopo aver corretto l'errore più elevato (1 °), ricaricare la pagina. Se si verificano ancora errori, correggere nuovamente l'errore più in alto.

7) Se nessuno dei precedenti aiuta, utilizzare il reindirizzamento JAVSCRIPT (tuttavia, metodo fortemente sconsigliato), potrebbe essere l'ultima possibilità in casi personalizzati ...:

echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit;

Perché è esplicitamente ambientato 301o 302importante?
Jānis Elmeris,

26

Un semplice consiglio: uno spazio semplice (o carattere speciale invisibile) nel tuo script, proprio prima del primo <?phptag, può causare questo! Soprattutto quando lavori in una squadra e qualcuno sta usando un IDE "debole" o ha rovinato i file con strani editor di testo.

Ho visto queste cose;)


22

Un'altra cattiva pratica può invocare questo problema che non è stato ancora dichiarato.

Vedi questo frammento di codice:

<?php
include('a_important_file.php'); //really really really bad practise
header("Location:A location");
?>

Le cose vanno bene, vero?

E se "a_important_file.php" è questo:

<?php
//some php code 
//another line of php code
//no line above is generating any output
?>

 ----------This is the end of the an_important_file-------------------

Questo non funzionerà? Perché? Perché già viene generata una nuova linea.

Ora, anche se questo non è uno scenario comune, cosa succede se si utilizza un framework MVC che carica molti file prima di trasferire le cose sul controller? Questo non è uno scenario insolito. Preparati per questo.

Da PSR-2 2.2:


  • Tutti i file PHP DEVONO utilizzare il file Unix LF (linefeed) line ending.
  • Tutti i file PHP DEVONO terminare con a single blank line.
  • Il tag di chiusura?> DEVE provenire omittedda file contenentionly php

Credimi, seguire questi standard può farti risparmiare un sacco di ore dalla tua vita :)


2
Secondo diversi standard (ad esempio Zend), non dovresti in alcun modo mettere il ?>tag di chiusura in nessun file
Daniel W.

Non riesco a riprodurlo in ambiente Windows poiché funziona utilizzando qualsiasi combinazione (aggiunta di tag di chiusura, spazi vuoti, premendo il tasto Invio, ecc.). Sembra che questo problema si verifichi principalmente in ambienti Linux.
Junior Mayhé,

@JuniorM Dovrebbe essere riproducibile. Puoi condividere il codice che stavi sperimentando in un senso o qualcosa di simile?
MD. Sahib Bin Mahboob,

Sono su Windows 7, con l'ultimo Wamp installato. Penso che questo bug sia legato a caratteri nascosti per la fine della linea. Il mio shortcodes.php di Wordpress è stato il problema. Ho aggiunto a questo file una semplice funzione e ha iniziato a generare questo errore "header headed". Ho confrontato il mio shortcodes.php con wordpress 'ed era ok, tranne il CR LF(tipico fine di Windows). Lo risolvo scaricando il file originale dal repository di Wordpress che ha LF(fine linea Linux) invece di CR LFe ho anche spostato la mia funzione nelle funzioni.php del tema. Basato su: bit.ly/1Gh6mzN
Junior Mayhé l'

@Sahib, nota che ancora non riesco a riprodurre quanto dichiarato in questa risposta. La risposta va benissimo per l'ambiente Linux. Ho provato cose così vuote tra?> <?php , rimuovendo e aggiungendo una singola riga vuota, aggiunto e omesso tag di chiusura ?>. In Windows + Wamp tutte queste combinazioni funzionano bene. Strano ...
Junior Mayhé,

15

A volte quando il processo di sviluppo ha sia le stazioni di lavoro WIN sia i sistemi LINUX (hosting) e nel codice non viene visualizzato alcun output prima della riga correlata, potrebbe essere la formattazione del file e la mancanza della fine della linea Unix LF (linefeed) .

Quello che facciamo di solito per risolvere rapidamente questo problema è rinominare il file e sul sistema LINUX creare un nuovo file anziché quello rinominato, quindi copiarne il contenuto. Molte volte questo risolve il problema poiché alcuni dei file creati in WIN una volta spostati nell'hosting causano questo problema.

Questa correzione è una soluzione semplice per i siti che gestiamo tramite FTP e talvolta può far risparmiare tempo ai nostri nuovi membri del team.


2

Generalmente questo errore si verifica quando inviamo l'intestazione dopo l'eco o la stampa. Se questo errore si verifica in una pagina specifica, assicurarsi che la pagina non risponda a nulla prima di chiamare start_session().

Esempio di errore imprevedibile:

 <?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();

//your page content

Un altro esempio:

<?php
includes 'functions.php';
?> <!-- This new line will also arise error -->
<?php
session_start();
session_regenerate_id();

//your page content

Conclusione: non emettere alcun carattere prima di chiamare session_start()o header()funzioni nemmeno uno spazio bianco o una nuova riga

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.