2011-07-05 27 views
5

在一個PHP程序中,header()重定向可以指向結束程序流程,還是有值,例如,使用die()跟蹤它們是否安全?用戶是否有可能以某種方式利用該腳本來放棄重定向?如果用戶被重定向爲沒有足夠的訪問權限,並且以下代碼僅適用於未被重定向的用戶,則此問題至關重要。可以重新定向header()來結束程序流嗎?

+0

你應該使用exit()或者死在你的頭後 –

+0

要得到一個目前已經設置了頭的列表,請參見['headers_list()'](http://php.net/manual/en/function.headers -list.php) – hakre

回答

7

不,標頭不結束程序執行。你必須退出或死亡才能結束它。你可以自己用這樣的嘗試這樣的:/tmp/test

<?php 
file_put_contents('/tmp/test', '1'); 
header('Location: http://www.emilvikstrom.se/'); 
file_put_contents('/tmp/test', '2'); 
?> 

檢查的內容,你會發現這是2

我也試過這個腳本:

<?php 
header('Location: http://www.emilvikstrom.se/'); 
echo "Test\n"; 
?> 

通過telnet到手動發送HTTP請求,這個結果一起:

HTTP/1.1 302 Found 
Server: nginx/0.7.67 
Date: Tue, 05 Jul 2011 07:27:14 GMT 
Content-Type: text/html 
Connection: close 
X-Powered-By: PHP/5.3.3-7+squeeze1 
Location: http://www.emilvikstrom.se/ 
Vary: Accept-Encoding 
Content-Length: 5 

Test 

正如你看到的,這是後迴盪一切位置標題仍然被髮送到瀏覽器。事實上,如果您要發送更多頭文件,或者回顯的內容非常重要,PHP無法在header調用之後知道。