Lösung für Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von...
Wenn die Meldung häufig angezeigt wird: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von (...) . Tatsächlich wurde der gewünschte Effekt erzielt, aber ich habe im Internet viele Lösungen gefunden. Die durch umfassende Verwendung erhaltene Lösung ist
1 PHP-Tag oben auf der Seite. >
2 Ob_end_flush(); hinzufügenUnter den zurückgegebenen Informationen können Sie die Realität der Fehlermeldung blockierenAuch die Methoden anderer Personen übertragen , vielleicht in anderen Situationen Wird wirksam seinWenn Sie diese Meldung erhalten: „Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von ....“Wenn Sie diese Warnung beim Ausführen des PHP-Programms sehen : „Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von …“
Es gibt mehrere Lösungen:
Stellen Sie sicher, dass nach des aufrufenden PHP-Skripts keine Leerzeile steht. ?>, insbesondere Dateien einschließen oder erfordern. Viele Probleme werden durch diese Leerzeilen verursacht.
2. Verwenden Sie die Exit-Anweisung (zum Lösen verwenden Sie „Exit“).
Exit() nach dem Header hinzufügen ");
exit();
3. PHP hat dieses lästige Problem: Wenn Ihr HTML vor PHP-Code oder Header-Änderung steht, bevor er auf eine bestimmte Seite umgeleitet wird, wird die Meldung „Warnung: Nicht möglich“ angezeigt Header-Informationen ändern – Header bereits gesendet von ...“ Grundsätzlich ist der Header bei jeder Ausgabe an den Browser festgelegt und kann nicht geändert werden. Es gibt also zwei Möglichkeiten, das Problem zu umgehen:
Da es sich um ein Skript handelt, wird der Header erst bei der Ausführung von Javascript geändert.
<? echo "<script> self.location(\"file.php\");</script>"; ?>
3b Verwenden Sie die Ausgabepufferung (mit Ausgabe-Caching lösen). :
Dadurch wird der Ausgabepuffer auf dem Server gespeichert und noch nicht an den Browser ausgegeben, was bedeutet, dass Sie den Header bis zur Anweisung ob_end_flush() beliebig ändern können Bei der Javascript-Methode wird davon ausgegangen, dass im Browser Javascript aktiviert ist. Es entsteht jedoch ein Mehraufwand für die Speicherung des Ausgabepuffers auf dem Server, aber mit moderner Hardware wäre das meiner Meinung nach keine so große Sache Sie wissen sicher, dass Ihr Benutzer Javascript in seinem Browser aktiviert hat.
<?php ob_start(); ?> ... HTML codes ... <?php ... PHP codes ... header ("Location: ...."); ob_end_flush(); ?>
Wie der Code oben speichert diese Methode die Seite bei der Generierung zwischen, sodass der Header nach der Ausgabe des Headers ausgegeben werden kann . Das Wunschboard auf dieser Site verwendet diese Methode, um das Header-Problem zu lösen.
Klicken Sie in der Hintergrundverwaltung oder manchmal im Forum auf eine Seite und eine
Diese Art von Anweisung wird oben angezeigt Der Grund dafür ist ein Problem mit der setcookie-Anweisung.
Es gibt einige Einschränkungen bei der Verwendung von Cookies, wie zum Beispiel:
1. Die Beschreibung des Aufrufs setcookie muss vor dem -Tag platziert werden.
3. Das Cookie erscheint erst im Programm, wenn die Webseite neu geladen wird
4. Die Setcookie-Funktion muss gesendet werden, bevor Daten an den Browser ausgegeben werden
5.......
Basierend auf der oben genannten Einschränkung stoßen Sie beim Ausführen der Funktion setcookie() häufig auf Probleme wie „Undefinierter Index“, „Header-Informationen können nicht geändert werden – Header bereits gesendet von“ usw. Die Methode zur Lösung des Problems Der Fehler „Header-Informationen können nicht geändert werden – Header bereits gesendet von“ lautet: Verzögern Sie die Ausgabe von Daten an den Browser. Daher können Sie die Funktion ob_start(); hinzufügen. Dies wird es lösen.
4.set Output_buffering = On in php.ini (aktivieren Sie Output_buffering in php.ini)
Set Output_buffering = On aktiviert die Ausgabepufferung für alle Dateien. Diese Methode kann jedoch Ihre PHP-Ausgabe verlangsamen. Die Leistung dieser Methode hängt davon ab, mit welchem Webserver Sie arbeiten und welche Art von Skripten Sie verwenden.
Gestern wollte ich PHP verwenden, um einen Code zum Herunterladen von Dateien zu schreiben. Da ich nicht wissen wollte, wie man das HTTP-Protokoll einrichtet, bin ich direkt zu php.NET gegangen, um Beispiele für den Header zu finden. ) Funktion. Es gab viele Codes, also habe ich einen Abschnitt direkt kopiert
<?php $file = 'filetest.txt';//filetest.txt文件你随便写点东西进去就好了 header("Content-Disposition: attachment; filename=" . urlencode($file)); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Length: " . filesize('filetest.txt')); flush(); // this doesn't really matter. $fp = fopen($file, "r"); while (!feof($fp)) { echo fread($fp, 65536); flush(); // this is essential for large downloads } fclose($fp); ?>
运行了一下发现不行,一直报错:Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\test\downloadfile\file_download.php:1) in E:\xampp\htdocs\test\downloadfile\file_download.php on line 3
我很看了很久,文件一开始就直接是header代码了,没任何输出怎么会说已有字符输出了呢?后来上网查到别人给的提示,才发现,原来我创建文件的时候是直接用记事本存储为UTF8, 原来这样也会出错
----------------以下是引用他人的建议 --------------------
方法一:
在PHP里Cookie的使用是有一些限制的。
1、使用setcookie必须在标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出
.....
由于上面的限制,在使用setcookie()函数时,学会遇到 "Undefined index"、"Cannot modify header information - headers already sent by"…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start();
ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用 ob_end_flush()或flush()输出缓冲区的内容。
方法二:
解 决Warning: Cannot modify header information - headers already sent by ...... 前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header information - headers already sent by ......
今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上
ob_start();
失败。
后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache,OK。看来这才是解决办法。
特别注意:(我就是看了这个才解决问题的)
如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉 bom,可以用Notepad++打开转换一下。(我就是看了这个才解决问题的)
用PHP的ob_start(); 控制您的浏览器cache 。我另外单独转载了一篇文章关于用PHP的ob_start();控制您的浏览器cache的文章
更多php中header无法跳转相关文章请关注PHP中文网!