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

﹥>﹥吖頭↗ 提交于 2019-12-20 03:34:10

问题


<?php

ob_start();

echo "<body><p>Hello "

if ($condition) {
   header( "Location: http://www.google.com/" );
   exit;
}

echo " World!</p></body>";
ob_end_flush();

?>

When $condition is true I get this:

<body>Hello

What I want is when $condition will be true then go to Google!!!

I don't know what is happening, can you explain or give me a solution!?

Thanks.


回答1:


Just add ob_end_clean(); before the header call.




回答2:


Everything should work, just put an ; after echo "<body><p>Hello" and you will be fine..




回答3:


If I were you, I would have started what might go wrong first then do the processing.

An example

$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

}


来源:https://stackoverflow.com/questions/11823130/how-to-redirect-with-header-location-in-php-when-using-ob-start

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!