2011-04-03 19 views
15

我正在創建一個腳本來驗證表單,我問自己一個問題。當我使用標題(請參閱下面的示例)時,是否需要使用退出權限?我的意思是,使用頭也意味着它默認退出,因此我不需要使用命令退出?我是否需要在標題後使用exit(「Location:http:// localhost/...」);?

// cancel button clicked 
if (isset($_POST['cancel'])) { 
    header("Location: http://localhost/admin/tracks.php"); 
    exit; 
} 

echo '<p>$name</p>' 
+0

我認爲你不需要。發送標題時,您將被重定向,腳本將停止執行。 – EmCo 2011-04-03 05:51:30

+3

@EmCo不完全正確。看我的答案中的例子。 – AgentConundrum 2011-04-03 06:03:51

+0

可能重複[爲什麼我必須在PHP中通過頭('Location ..')重定向後調用'exit'?](http://stackoverflow.com/questions/2747791/why-i-have-to-call-exit-after-redirection-through-through-headerlocation-in-php) – kapa 2012-04-30 09:30:43

回答

7

我用exit的報頭 - >位置調用之後,因爲我希望能夠絕對依賴的事實,腳本將不會得到過去的報頭 - >位置的呼叫。

如果有什麼地方一個錯誤,你的腳本開始生成輸出前的報頭 - >位置呼叫,該呼叫將失敗,並且腳本執行將繼續正常進行(除非你調用exit)

+0

不是一個壞主意,它絕對不會去傷害任何東西...... – 2011-04-03 05:54:11

+1

關於失敗的呼叫的好處。我甚至沒有考慮過這種可能性。 – AgentConundrum 2011-04-03 06:04:58

+0

您的錯誤示例無關緊要。沒有錯誤需要腳本繼續 – 2011-04-03 06:21:23

22

你應該叫exit()因爲header()不會自動停止執行腳本 - 或者如果它(我真的不是100%),它絕對不會立即停止腳本。

例如,試試這個代碼:

<?php 

    header("Location: http://www.google.com"); 
    unlink(__FILE__); 

?> 

這個小腳本使用header()將您重定向到谷歌,然後刪除自身。如果你運行它,你會注意到在你被重定向後,該文件仍然被刪除。這意味着即使header()調用將您重定向,unlink()調用仍會執行。

+0

我有同樣的問題,它會繼續執行!最好退出; – TimNguyenBSM 2015-05-14 16:22:27

0

如果您重定向那樣,通常不會發送輸出(取決於輸出緩衝等),但是如unlink()所示,腳本不會隨着header()而死。

因此,如果要防止腳本在重定向後繼續,那麼exit()或die()調用是必需的。

1

儘管上述答案聽起來不錯,但如果您不確定代碼路徑,可能會導致意外的結果。例如,如果您使用的框架依賴於代碼執行將始終運行的事實,則可能會無意間中斷它。

這可能是從用戶的角度沒關係,他們仍然會被重定向,將是毫無收穫,但考慮到以下幾點:

您使用的框架(OS或自定義),其預計登錄重定向或設置其他標題(或其他任何數量的項目)。通過調用exit,您可以規避該邏輯,因此可能會得到意想不到的結果。

所以簡而言之,是的,上述方法是行得通的,只是謹慎地知道你在短路之前會發生什麼。

-1

不使用頭也意味着它在默認情況下

怎麼會這樣離開? 如果您的標題不是Location:而是Content-type:Cache-control或其他什麼?

相關問題