2011-08-18 71 views
3

我有一個功能,「redirect_to的()」寫在PHP腳本,爲成功更新到網頁上我的定製CMS後調用。它在本地主機上運行正常,但是當我在實際活動域上嘗試時,我收到以下錯誤消息:重定向函數Php

警告:無法修改標頭信息 - 標頭已經發送(輸出開始於/ hermes/bosweb/web119/b1192/ipg.typaldosnetcom/edit_listing.php:7)中的線20

這裏/hermes/bosweb/web119/b1192/ipg.typaldosnetcom/includes/functions.php是用於redirect_to的代碼()函數:

function redirect_to ($location = NULL) { 
    if ($location != NULL) { 
     header("Location: {$location}"); 
     exit; 
    } 
} 

我已經確定在輸出任何HTML之前調用這個函數,所以我不確定這個問題到底是什麼。

我的問題:我爲什麼會收到這個錯誤?

+1

也許在一些'<?php'標籤之前有一個空格字符? /hermes/bosweb/web119/b1192/ipg.typaldosnetcom/edit_listing.php:7包含哪些內容? – PeeHaa

+1

edit_listing.php的第7行是什麼? –

+0

這是一個空白問題......一個隱藏的空間。謝謝大家。 –

回答

1

您已經發出你的輸出到你的頁面設置的頭之前。首先你需要設置標題,然後輸出。

它甚至可以是空白。

+0

UTF-8 BOM也可以成爲問題:) – CoR

2

這不是說謊。在實現這一點之前,你已經輸出了一些東西。檢查錯誤消息中提到的位置。

向我們展示了第一25行提及的每個文件的。

0

這意味着已經在建議的行上輸出了一些東西。嘗試去那裏看看它做了什麼。

嘗試粘貼周圍的代碼上位置更好的澄清,如果你自己不能發現問題。

0

一個常見原因是有你在,包括PHP文件後面的線......

簡單的解決方案:從所有文件中刪除關閉PHP標籤「?>」,因爲它是沒有必要的..

0

使用輸出緩衝:

<?php 
ob_start(); 

// Test buffered output. 
echo 'hello world'; 

function redirect_to ($location = NULL) { 
    if ($location != NULL) { 
     header('Location: ' . $location); 
     exit; 
    } 
} 

// rest of php file here 

ob_end_flush(); 
?> 

文檔:ob_start()ob_end_flush()

+0

這將如何幫助?緩衝函數定義什麼也不做 - 只有當函數被調用並且函數的執行不會被緩衝時纔會顯示錯誤。 –

+0

假設輸出發生在同一個文件上,這將起作用。看到'/ /這裏的PHP文件的其餘部分?這麼快就倒下了,tsk tsk。 – AlienWebguy

+0

另外,我不建議他緩衝功能,哈哈。想想親愛的。 – AlienWebguy

0

,如果你開的PHP腳本TA之前有一個字符,你可以測試通過刪除任何關閉的php腳本標記。這樣你就可以確定沒有任何字符了(這是不需要的)。