您好,登錄后才能下訂單哦!
運行腳本時,出現如下錯誤:
警告:不能更改頭信息-已經( 輸出在/some/file.php:12開始 )在/some/file.php發送上線23頭
錯誤消息中提到的行包含header()和setcookie()調用。
這可能是什么原因? 以及如何解決?
一個簡單的提示:在腳本中,就在第一個<?php標記之前的簡單空格(或不可見的特殊字符)會導致這種情況! 尤其是當您在團隊中工作且有人在使用“弱” IDE或使用奇怪的文本編輯器弄亂了文件時。
我之前曾多次收到此錯誤,并且可以肯定所有PHP程序員至少一次收到過此錯誤。
可能的解決方案1
該錯誤可能是由文件開頭之前或文件結尾之后的空格引起的。這些空格不應在此處。
例)這里應該沒有空白
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框架,該框架會在將內容移交給控制器之前加載大量文件? 這并非罕見的情況。 為此做好準備。
從PSR-2 2.2開始:
所有PHP文件都必須使用Unix LF (linefeed) line ending 。
所有PHP文件都必須以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()之前,請勿輸出任何字符
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。