1. 程式人生 > >Warning: Cannot modify header information的解決辦法

Warning: Cannot modify header information的解決辦法

昨天將本站的wordpress升級到最新版本,今天早上,經過兩位朋友的提醒,才發現用非chrome瀏覽器開啟部落格,頭部會顯示有錯誤,錯誤內容為:

Warning: Cannot modify header information – headers already sent by (output started at /home/tiandiyo/domains/tiandiyoyo.com/public_html/wp-content/themes/freshblog/header.php:5) in /home/tiandiyo/domains/tiandiyoyo.com/public_html/wp-content/themes/freshblog/header.php on line 106

於是查了下header.php的106行程式碼,是setcookie的一段程式碼,本意是來訪者,如果沒有顯示模式(普通or寬屏)的cookie,即第一次來訪,強制儲存cookie為寬屏模式。不知道是不是由於升級到最新版本的wp的原因才報錯的,不管三七二十一,註釋掉語句,將相關邏輯寫入到下面的條件中。

//顯示模式切換
//if(!isset($_COOKIE['MODOFTIANDIYOYO']))
    //setcookie('MODOFTIANDIYOYO',1,time()+3600*24*60,"/");
if(isset($_COOKIE['MODOFTIANDIYOYO']) && $_COOKIE["MODOFTIANDIYOYO"] == 0) 
	echo "<div class='sw'><a href='' id='switches'>切換至寬屏</a></div>";
else 
	echo "<div class='sw'><a href='' id='switches'>切換至普通</a></div>";

順便說一下本站實現寬屏自適應和普通模式的思路,利用cookie儲存顯示模式,根據不同的顯示模式載入不同的樣式style。在檔案header.php插入以下程式碼:

<?php if($_COOKIE["MODOFTIANDIYOYO"] == 1 || !isset($_COOKIE['MODOFTIANDIYOYO'])) 
	$reallycss = get_bloginfo('stylesheet_directory') . "/style2.css";
else 
	$reallycss = get_bloginfo('stylesheet_directory') . "/style.css";
?>
<link rel="stylesheet" id = "csslink" type="text/css" href="<?php echo $reallycss; ?>" media="screen" />

並在適當的位置插入第一段顯示模式切換的程式碼,最後在尾部插入js,來儲存cookie以及更改切換的文字。

//瀏覽方式,0普通,1寬屏
document.getElementById("switches").onclick = function(){
	var name = document.getElementById("switches").innerHTML;
	var mycss = document.getElementById("csslink").href;
	if(name == "切換至寬屏") {
		mycss = mycss.replace("style.css","style2.css");
		document.getElementById("switches").innerHTML = "切換至普通";
		SetCookie("MODOFTIANDIYOYO",1);
	}
	else {
		mycss = mycss.replace("style.css2","style.css");
		document.getElementById("switches").innerHTML = "切換至寬屏";
		SetCookie("MODOFTIANDIYOYO",0);
	}
	location.reload();
}

後話,現在大多都自適應了,為什麼tiandi還要加個切換回普通模式的功能呢?因為以前用freshblog的普通版式習慣了,一開始改寬屏模式感覺有些不習慣,不過現在2個月下來,好像也適應了寬屏了,這個切換功能反正也不影響什麼,就留著吧。

文章評分1次,平均分5.0