2014-03-04 20 views
0

我跟隨Lynda.com教程在PHP和我正在學習有關PHP重定向。使用標題(「Location:basic.html」),導師說重定向工作必須是頁面上的第一件事。但是,我通過將php代碼放入標記並重定向仍然有效的方式進行了測試。我查看了其他在線資源,他們也表示重定向之後應該沒有任何內容。我所看到的資源是否過時或者我在這裏錯過了一個觀點?PHP的重定向工作是否在頁面頂部?

謝謝

我在本地機器上運行XAMPP。我的代碼是: 重定向

<?php 
// This is how you redirect to a new page 
    function redirect_to($new_location) { 
     header("Location: " . $new_location); 
      exit;  
    } 

    $logged_in = $_GET['logged_in']; 

    if($logged_in == 1) { 
    redirect_to("basic.html"); 
    } else { 
     redirect_to("http://www.google.co.uk"); 
    } 
    ?> 

</body> 

+0

完整列表http://afishel.com/LearnHTML/lessons/lesson18.php – user1829823

回答

4

應該有一個PHP重定向之前沒有輸出。

否則,您可能會遇到錯誤:「Headers already sent」。

但是,你可以做任何你想用的PHP,而不是echo或類似的東西。

+0

..或者只是使用[輸出控制功能](http://php.net/manual/en/ref.outcontrol.php ) –

+0

這取決於輸出緩衝方法集... – feeela

+0

如果輸出被緩衝,那麼仍然沒有輸出。 但肯定可以用'ob_ *'來捕捉輸出,並且仍然使用回聲。雖然我沒有看到太多的用例。 –

0

對象緩存可以使用ob_start()在文件

ob_start(); 
echo("Hello there!"); 
0

在你的情況是正常的頂部help.Try。因爲在header()函數之前沒有使用任何輸出語句。 可能的錯誤:當您使用echo()或print()被調用之前,會根據作者在頁眉之前調用標題()

+0

他在PHP之前有HTML輸出。 – HarryFink

0

,因爲如果在頁面上輸出內容之前應該先重定向您嘗試在重定向之前在頁面上打印某些內容,您會收到錯誤消息,說標題已發送

因此,在這種情況下,首先需要使用標題重定向到其他頁面,而不會出現任何錯誤。

0

你的代碼工作正常(即)當您執行此代碼會重定向到www.lynda.com因爲$logged_in具有0值,因爲沒有價值$ _GET [「LOGGED_IN」]變量。 當您在Lynda.com上閱讀教程時,header()函數之前的任何輸出語句都會導致錯誤。 在你的代碼中有前頭()語句提到因此,它不會顯示任何錯誤

0

謝謝大家的回覆沒有輸出語句。在這種情況下,這是因爲我在PHP ini中有output_buffering。一旦我把它關掉,我就從服務器得到了預期的響應。

再次感謝您的支持。