運行腳本時,出現以下錯誤: php
警告:不能更改頭信息-已經( 輸出在/some/file.php:12開始 )在/some/file.php發送上線23頭 程序員
錯誤消息中提到的行包含header()
和setcookie()
調用。 cookie
這多是什麼緣由? 以及如何解決? session
一個簡單的提示:在腳本中,就在第一個<?php
標記以前的簡單空格(或不可見的特殊字符)會致使這種狀況! 尤爲是當您在團隊中工做且有人在使用「弱」 IDE或使用奇怪的文本編輯器弄亂了文件時。 框架
我看過這些東西;) 編輯器
我以前曾屢次收到此錯誤,而且能夠確定全部PHP程序員至少一次收到過此錯誤。 函數
可能的解決方案1 spa
該錯誤多是由文件開頭以前或文件結尾以後的空格引發的。這些空格不該在此處。 code
例)這裏應該沒有空白 ip
echo "your code here"; ?> THERE SHOULD BE NO BLANK SPACES HERE
檢查與致使此錯誤的文件關聯的全部文件。
注意: 有時,像gedit(默認的Linux編輯器)之類的EDITOR(IDE)在保存文件上添加一個空行。 這不該該發生。 若是您使用的是Linux。 您可使用VI編輯器刪除頁面末尾?>以後的空格/行。
可能的解決方案2:若是不是您這種狀況,請使用ob_start輸出緩衝:
<?php ob_start(); // code ob_end_flush(); ?>
這將打開輸出緩衝,而且將在緩衝頁面以後建立標題。
代替下面的行
//header("Location:".ADMIN_URL."/index.php");
寫
echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");
要麼
?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php
確定會解決您的問題。 我遇到了一樣的問題,但經過上述方式編寫標題位置解決了。
另外一個很差的作法可能會引發此問題,還沒有說明。
請參見如下代碼段:
<?php include('a_important_file.php'); //really really really bad practise header("Location:A location"); ?>
事情還好吧?
若是「 a_important_file.php」是怎麼辦:
<?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-------------------
這行不通嗎? 爲何?由於已經生成了新行。
如今,儘管這不是常見的狀況,可是若是您使用的是MVC框架,該框架會在將內容移交給控制器以前加載大量文件? 這並不是罕見的狀況。 爲此作好準備。
Unix LF (linefeed) line ending
。 single blank line
結尾。 only php
包含only php
文件中必須omitted
?>標記 相信我,遵循這些標準能夠爲您節省不少時間:)
一般,當咱們在回顯或打印後發送標題時,會出現此錯誤。 若是在特定頁面上發生此錯誤,請確保在調用start_session()
以前該頁面沒有回顯任何內容。
不可預測的錯誤示例:
<?php //a white-space before <?php also send for output and arise error session_start(); session_regenerate_id(); //your page content
再舉一個例子:
<?php includes 'functions.php'; ?> <!-- This new line will also arise error --> <?php session_start(); session_regenerate_id(); //your page content
結論:在調用session_start()
或header()
函數header()
甚至是空格或換行符session_start()
以前,請勿輸出任何字符