[使用ob_start时如何重定向php中的标头位置?

问题描述 投票:2回答:4
<?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 !!!

我不知道发生了什么,您能解释一下还是给我解决方案!?

谢谢。

php header location ob-start
4个回答
3
投票

只需在标题调用之前添加ob_end_clean();


2
投票

一切正常,只要在回声“ ;”后面放一个<body><p>Hello,就可以了。


1
投票

如果我是你,我本来会先出问题,然后再进行处理。

示例

$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

}

0
投票

为了解决类似的情况,其中一个函数正在使用ob_start()并在此之后出现header("Location: http://www.example.com");,但出现了“ 已经发送...”,我将header(...调用替换为

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

并且在特定情况下可行(无论如何,只需要重定向页面即可。)

© www.soinside.com 2019 - 2024. All rights reserved.