如何使用ob_start在PHP中的标题位置重定向?
问题描述:
<?php
ob_start();
echo "<body><p>Hello "
if ($condition) {
header("Location: http://www.google.com/");
exit;
}
echo " World!</p></body>";
ob_end_flush();
?>
当$condition
是真的,我得到这个:如何使用ob_start在PHP中的标题位置重定向?
<body>Hello
我想是时候$condition
将是真的,那么去谷歌!
我不知道发生了什么,你能解释还是给我一个解决方案!?
谢谢。
答
只需在标题调用之前添加ob_end_clean();
。
答
如果我是你,我会先开始可能会出错的地方,然后再进行处理。
一个例子
$exit_condition_1 = some_value1;
$exit_condition_2 = some_value2;
if($exit_condition_1 == false){
//Redirect
//Exit
}
if(!$exit_condition_2){
//Redirect
//Exit
}
//start the buffer ob_start()
//show some HTML
//flash the buffer ob_end_clean()
there is no point of starting the buffer then if something goes wrong close it and redirect. Just do value testing at the begining then process the request.
An example: lets say that you want to view a product's info and you have a function that will do that
function view_product($product_id){
if(!$product = getProductById($product_id)){
//product does not exist, redirect
}
if(the user does not have enough access rights){
//show a message maybe
//redirect
}
//everything is alright then show the product info
}
答
一切都应该工作,只要把;
回声 “<body><p>Hello
” 后,你会被罚款..
IMO,ob_start()可以用 – asprin 2012-08-06 05:57:23
免掉我可以” t删除ob_start(),因为我需要在写入客户端之前处理输出。 – 2012-08-06 06:00:10