2011-04-11 68 views
-6

可能重複:
Headers already sent by PHP不能更改頭信息

我從下面的代碼收到以下錯誤,我不完全知道爲什麼。如果你能告訴我如何解決這個問題,那會很棒。先謝謝了。

警告:不能更改頭信息 - 頭已經發出(輸出開始...)上線45

<?php 


    // Initialization 
    $conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD); 
    mysql_select_db(DB_NAME, $conn); 

    // Error checking 
    if(!$conn) { 
     die('Could not connect ' . mysql_error()); 
    } 

    // Localize the GET variables 
    $ref = isset($_GET['ref']) ? $_GET['ref'] : ""; 

    // Protect against sql injections 
    // Insert the score 
    $retval = mysql_query("INSERT INTO $table(
      site 
     ) VALUES (
      '$ref' 
     )",$conn); 

    if($retval) { 
     echo "Successfull"; 
    } else { 
     echo "Unsuccessfull " . mysql_error(); 
    } 

    mysql_close($conn); 
?> 
<?php 
$url = $_GET['url']; 
    $loc = 'Location: '. $url; 
    header($loc); 
exit; 
?> 
+5

http://stackoverflow.com/search?q=Cannot%20modify%20header%20%20information或http://www.google.com/search?q=cannot+修改+報頭+報信息 – mario 2011-04-11 18:46:39

回答

6

取出回聲通話,你不能到瀏覽器之前,發送信息標題。

你可以嘗試這樣的事情仍然顯示,如果錯誤發生的情況:

if(!$retval) { 
    echo "Unsuccessfull " . mysql_error(); 
} 
1

如果更改了任何文本之前的頭,你不能輸出到頁眉命令,否則頭部就已經被髮送。

即。

if($retval) { 
    echo "Successfull"; 
} else { 
    echo "Unsuccessfull " . mysql_error(); 
} 

正在輸出文本,然後再更改標頭。

0

我一般建議這樣的情況是保存所有輸出到最後,因爲gmadd提到,你可以做ob_start,但我更喜歡將數據存儲在一個字符串中而不必添加額外的代碼(I知道你也可以在.htaccess文件中指定它,我會通過添加實際的ob_start項目來實現這個路線)。

我會怎麼做:

$display = ""; // initiate the display string 
// etc doe here 
if($retval) { 
    $display .= "Successfull"; 
} else { 
    $display .= "Unsuccessfull " . mysql_error(); 
} 

// end of the script right before ?> 
echo $display; 
?> 

ob_start方法可行,如果你想要去的路線,你可以在.htaccess文件中添加這個(給定的AllowOverride在Apache安裝設置):

php_value output_buffering On 

我仍然建議$display存儲方法,但這是我個人的意見。

0

用途:

<meta http-equiv="Refresh" content="0;url=http://www.example.com" />