2010-08-26 25 views
7

遷移到我的新服務器時遇到了一些奇怪的事情。能夠在標題前回復()

我有一個腳本,可以根據特定條件將用戶重定向到另一個網頁。然而,我在做的是迴應'重定向...',然後使用header()函數實際重定向。下面是代碼的樣子:

if($condition) { 
    echo 'Redirecting...'; 
    header('Location: ' . $url); 
} 

現在我只注意到,這是轉換到我們的新的服務器後不正確,測試了它,並認爲這將不只是重定向輸出重定向......有一次我在使用header()函數之前,搜索了它,得知你不能有任何類型的輸出(除非使用ob_start等)。

問題是,爲什麼這個代碼不適用於任何PHP安裝,在我的舊服務器上工作?它將在header()之前使用echo重定向沒有問題。

謝謝!

+1

我相信你可以在默認情況下在php.ini打開輸出緩衝。下行是在向用戶發送任何輸出之前,整個請求必須完成。 – meagar 2010-08-26 13:33:25

回答

9

您可能在舊服務器上輸出緩衝:在腳本結束運行之前,輸出緩衝不會輸出任何內容。這使得它可以在實際輸出之前獲取標題(因爲它知道標題應該先發送)。

如果這是有道理的。

+0

謝謝!這似乎是剛剛檢查舊服務器上的php.ini的問題,output_buffering被設置爲4096,因此它在:) – 2010-08-26 13:42:30

1

它在您的舊服務器上工作,因爲您默認輸出緩衝,由php.ini設置。

+0

謝謝!我很感激! – 2010-08-26 13:43:41

4

也許您的舊安裝在php.ini中將output_buffering定義爲true。這延遲了輸出,即使在回聲之後也可以設置標題。

+0

謝謝!我很感激! – 2010-08-26 13:43:24

3

即使您自己沒有主動這樣做,您也必須啓用緩衝功能。 output_buffering = On在php.ini?

+0

謝謝!我很感激! – 2010-08-26 13:42:54

0

舊服務器可能在默認情況下啓用了輸出緩衝。這意味着它不會立即echo,而是等到整個腳本完成,然後echo。這也意味着標題將在echo之前發送(因爲它已被緩衝),因此不會導致警告。

在新的服務器上,您很可能沒有默認啓用輸出緩衝,這將意味着它會立即將echo緩衝起來,因此它會在標題前發送併產生警告。

我會鼓勵你使用headers_sent()檢查頭使用echoheaders(),像在此之前已發出:

<?php 
echo "Foobar\n"; 
if(!headers_sent()) 
    header('Location: /helloworld.php'); 
?> 

相關鏈接:

+0

謝謝你的幫助我欣賞它:) – 2010-08-26 13:57:12