<?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>"
它在那种特殊情况下有效(无论如何,所需要的只是一个页面重定向(。