问题
<?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