使用ob_start时如何在 php 中使用标头位置重定向


How to redirect with header location in php when using ob_start?

<?php
ob_start();
echo "<body><p>Hello "
if ($condition) {
   header( "Location: http://www.google.com/" );
   exit;
}
echo " World!</p></body>";
ob_end_flush();
?>

$condition是真的时,我得到这个:

<body>Hello

我想要的是什么时候$condition是真的,然后去谷歌!!

我不知道发生了什么,你能解释或给我一个解决方案吗!?

谢谢。

只需在标头调用之前添加ob_end_clean();即可。

一切都应该工作,只需在回显"<body><p>Hello"之后放一个;,你就会没事的。

如果我

是你,我会先开始可能出错的事情,然后再进行处理。

一个例子

$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
}

为了解决类似的情况,即函数正在使用 ob_start(( 并且之后有header("Location: http://www.example.com");但错误地">已发送...",我将header(...调用替换为

echo "<script> window.location.href = 'https://www.example.com' </script>"

它在那种特殊情况下有效(无论如何,所需要的只是一个页面重定向(。