<?php ob_start(); echo "<body><p>Hello " if ($condition) { header( "Location: http://www.google.com/" ); exit; } echo " World!</p></body>"; ob_end_flush(); ?>
Когда $condition
true, я получаю следующее:
<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 }