在PHP程序中,可以使用header()重定向来结束程序流程,还是有值,例如,使用die()跟随它们是安全的?用户是否可以通过某种方式放弃重定向来利用脚本?如果用户因没有足够的访问权限而被重定向,并且以下代码仅适用于未重定向的用户,则此问题至关重要。
答案 0 :(得分:7)
不,标题不会结束程序执行。你必须自己以退出或死亡结束它。你可以自己尝试这样的事情:
<?php
file_put_contents('/tmp/test', '1');
header('Location: http://www.emilvikstrom.se/');
file_put_contents('/tmp/test', '2');
?>
检查/tmp/test
的内容,您会发现它是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
如您所见,在Location标头之后回显的所有内容仍然会发送到浏览器。事实上,如果您要发送更多标题,或者您回复的内容非常重要,那么PHP在header
调用后无法知道。