2010-07-29 137 views
1

index.php頁面代碼是 -無法修改標題信息PHP中的警告信息?

<?php 

if(!$_COOKIE['authorized'] == 1) { 
header("Location: login.php"); 
} 

?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>My Photo Website</title> 
<script src="js/jquery-1.2.6.pack.js" type="text/javascript"></script> 
<script src="js/jquery.lightbox-0.5.pack.js" type="text/javascript"></script> 
<script src="js/myscript.js" type="text/javascript"></script> 
<link rel="stylesheet" href="css/default.css" /> 
<link rel="stylesheet" href="css/jquery.lightbox-0.5.css" /> 


</head> 
<body> 
<form method="post" action="changePhotoTitle.php"> 
<div id="container"> 
<h1>My Photos <small>click on the text to change the title.</small></h1> 
<a href="login.php?logout=1" id="logout">logout</a> 

<div id="main"> 

<?php require 'getPhotos.php'; ?> 

<div id="response" class="hidden" /> 
</div><!-- end main--> 

</div><!-- end container--> 
</form> 
</body> 
</html> 

我database.php中頁面的代碼是 -

<?php 

$db_name = "db"; 
$db_server = "localhost"; 
$db_user = "root"; 
$db_pass = ""; 

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error()); 

?> 

但followong警告消息coming- 警告:不能更改頭信息 - 頭已經在第4行的C:\ xampp \ htdocs \ pics \ index.php中發送(輸出開始於C:\ xampp \ htdocs \ pics \ index.php:1)

+0

看看http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/ – 2010-07-29 08:13:11

+0

你有沒有任何空白打開<?php或者您的文件是否有BOM表頭? – 2010-07-29 08:13:11

+0

哪裏是BOM? – nectar 2010-07-29 08:21:30

回答

4

從維基百科條目BOM報價:

字節順序標記

許多Windows程序(包括 Windows記事本)在保存爲UTF-8的任何 文檔的開始處添加字節0xEF, 0xBB,0xBF。這是Unicode字節 訂購標記(BOM)的UTF-8編碼,並且通常是 (稱爲UTF-8 BOM),即使 它與字節順序無關。如果使用BOM編碼的另一個 轉換爲 UTF-8而沒有將其剝離,則也會顯示 BOM。

的UTF-8 BOM的存在可能會導致與 現有的軟件,可以以其他方式處理UTF-8,例如互操作性問題:

+舊版的文本編輯器可以顯示BOM爲「 「在文檔開始時,即使UTF-8文件僅包含ASCII,否則會正確顯示。
+編程語言解析器通常可以在字符串常量和註釋中處理UTF-8,但不能在文件開始時解析BOM。

0

您是否嘗試刪除文件頂部的所有空白?

像這樣:

<?php 
if(!$_COOKIE['authorized'] == 1) { 
header("Location: login.php"); 
} ?> 

祝你好運;)

5

<?php

+0

不,沒有任何空白空間。你的BOM是什麼意思? – nectar 2010-07-29 08:28:58

0

在谷歌小的搜索確保沒有空格(包括BOM或換行符): http://www.tech-recipes.com/rx/1489/solve-php-error-cannot-modify-header-information-headers-already-sent/

1)找到hea der()聲明是 導致該問題。此行或之前的錯誤必須是 。

2)查找可能在此 頭語句之前發送輸出給用戶的任何語句。如果您發現一個或多個 ,請找到某種方法將標題 前面的語句移到其中。複雜 有條件的陳述可能會使 複雜化的問題,但他們也可能幫助 解決問題。考慮在 頂部的 條件表達式,該腳本儘早確定 標題值, 將其設置在那裏。

3)確保php開始和結束標記之外沒有空白 。 雖然<?php 開始標記之前的空白行看起來可能無辜,但當PHP處理 時,它會變成打印空白 行的 回顯語句。這是一個常見的罪魁禍首。

+0

錯誤消息說明在index.php的第1行處輸出的確切位置。這是<?php行 – 2010-07-29 08:16:53

+0

感謝馬克,你是對的 – 2010-07-29 08:17:50

0

您可能必須在一個空格開頭的

 <?php 

標籤之前

1

還要確保在這之前運行任何代碼,在一個單獨的文件可以同時具有<?php -opening和?> - 關閉。

如果一個腳本在te ?> -closing標籤之後以空格運行(例如,因爲愚蠢的編輯誰在那裏放行結束),PHP將開始在那裏發送輸出。

只需在文件末尾省略?>即可。如果PHP到達文件的末尾,並且它沒有?>,PHP將在那裏結束PHPmode。這是一個記錄的PHP功能。

所以,你可以重寫database.php如下

<?php 

$db_name = "db"; 
$db_server = "localhost"; 
$db_user = "root"; 
$db_pass = ""; 

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name) or die(mysqli_error()); 

沒有結束>

0

那麼我有一些其他很好的解決方案。

<?php 
ob_start(); 

if(!$_COOKIE['authorized'] == 1) { 
    header("Location: login.php"); 
} 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<!-- Rest of the code follows here --> 

主要問題是您還沒有啓動OB(輸出緩衝)。一旦啓動OB,不會再出現警告消息。 另一個需要注意的重點是,頁面的第一行&必須是5個字符的PHP開始標記(<?php)。之後,如果沒有任何空白字符,請按Enter,並用分號提供功能「ob_start()」。在那之後,無論你想要什麼,你都可以寫作,而不用擔心會得到那種歪理邪惡的警告信息。

同樣在整個代碼的末尾,你可以調用這個PHP函數「ob_end_flush()」來刷新整個輸出緩衝區。但是,如果不使用這個函數,代碼也可以工作,因爲默認情況下,PHP會在網頁處理結束時輸出輸出緩衝區的所有內容。

希望它有幫助。