<?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
为真然后转到Google !!!
我不知道发生了什么,您能解释一下还是给我解决方案!?
谢谢。
只需在标题调用之前添加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>"
并且在特定情况下可行(无论如何,只需要重定向页面即可。)