2010-08-24 135 views
61

在調用重定向函數頭之後,我應該調用exit還是不?php - 我應該在調用Location:header之後調用exit()嗎?

<?php // fileA 
$urlFailToGoTo = '/formerror.php'; 

if (sth) 
{ 
    header(sprintf("Location: %s", $urlFailToGoTo)); 
    exit(); //should I call exit() here? or return? 
} 

?> 

謝謝

+1

可能的重複[爲什麼我必須在通過頭('地點..')在PHP重定向後調用'退出'](http://stackoverflow.com/questions/2747791/why-i-have-to-call- exit-after-redirection-through-headerlocation-in-php) – 2014-10-14 17:52:49

回答

63

你絕對應該。否則腳本執行不會終止。單獨設置另一個標題不足以重定向。

+0

你好奧利弗, 退出是否終止執行腳本在formerror.php? 我想我的問題是當我在'header'之後調用'exit'時。哪個腳本受到影響並且不會再執行? 謝謝 – q0987 2010-08-24 13:28:12

+1

退出總是中斷當前腳本(在你的情況下「fileA」)。您重定向到的頁面(「/formerror.php」)完全不受影響。 重定向告訴瀏覽器向您在「位置」中指定的位置發起一個新的HTTP請求。這與手動點擊指向「formerror.php」的鏈接基本相同。 – rgroli 2010-08-24 14:06:13

+0

非常感謝:) – q0987 2010-08-24 23:50:49

17

它總體上是好的做法exit;(注 - 這是一個關鍵字,所以你不需要())發送Location:頭之後,因爲瀏覽器都應該重定向到新頁面,因此當前腳本的進一步執行通常是不希望的。

7

如果頭下沒有任何代碼(PHP或HTML),則不需要。

+0

你好aromawebdesign.com, 我有代碼在formerror.php。那是問題嗎? 謝謝 – q0987 2010-08-24 13:29:17

+0

如果你在調用header之後確實有任何類型的代碼,你應該調用die();或退出(); – Hydrino 2010-08-24 17:43:09

22

您應該像@rgroli解釋的那樣。如果你不想用括號打擾,你也可以撥打header()INexit():在HTTP

if(sth) exit(header("Location: http://example.com")); 

Location頭/ 1.1總是需要絕對路徑see the note here

注:這不是一個黑客,因爲exit code僅用於如果參數是整數,而header()產生空隙(它與代碼= 0,正常退出退出)。將它看作exit_header()函數就像在Location後面應該的那樣。

+1

我想你的意思是*'header' ** IN **'exit()'*? ;) – yckart 2016-07-10 19:39:35

+0

這不是說你傳遞'header'的輸出作爲'exit'的退出碼嗎?這不會有些不好嗎? – ADTC 2016-11-24 09:45:50

+0

@ADTC'header()'在PHP中返回void和退出代碼僅在參數爲整數時使用。在這種情況下,它只是靜默地停止代碼生成(意味着退出代碼= 0,正常退出)。 – 2016-11-24 10:02:44

5

退出是錯誤的編碼。

如果你曾經開發過一個大項目並想創建PHP單元測試用例,那麼退出會讓你感到困擾。

退出終止腳本和您的運行測試!有沒有辦法恢復測試和判斷它已失敗或不...

組織代碼的方式,沒有輸出,如果你使用重定向腳本自然結束......

+1

我認爲如果測試軟件無法對其正在測試的腳本進行沙盒測試,那就是失敗了。這就像一臺計算機關閉,因爲一個shell腳本使用'exit'命令終止。 – ADTC 2016-11-27 07:53:11

+0

不,在任何事情之間終止任何事情都是錯誤的。有一個編程背後的原因。它都是以一個函數調用開始的,它都以一個函數調用結束。 – Umingo 2016-11-30 13:15:45

+2

我不知道你在說什麼':/' – ADTC 2016-12-01 13:17:49

相關問題