while循环与PHP中的header()结合使用

时间:2009-07-11 11:43:49

标签: php header geocoding while-loop

我编写了一个脚本来对某些点进行地理编码,这些点的结构基本上是这样的:

//get an unupdated record
$arr_record;
while(count($arr_record) > 0)
{
//strings are derived from $arr_record
geocode($string1);
geocode($string2);
geocode($string3);
array_pop($arr_record);
}

function geocode($string) {
   //if successful
      update($coords)
}

function update($coords) {
   //update the database
   header('Location:http://localhost/thisfile.php')
}

麻烦的是,即使地理编码成功并且数据库已更新,并且标题重新发送,脚本仍然会返回到while循环而不重新加载页面并重新开始新记录。

这是PHP的正常行为吗?我如何避免它表现得像这样?

3 个答案:

答案 0 :(得分:5)

在header()之后使用die();终止脚本和输出。

答案 1 :(得分:3)

  

如何避免它出现这样的行为?

在header()之后放置exit()。

答案 2 :(得分:0)

另一种有效的方法是不在循环中直接发送标头。这是不正确的(我在php.net手册中找不到,但我记得以前在phpusenet中讨论过)。 它可能在不同的PHP版本中出乎意料。 &安培;不同的apache ver。安装。 php作为cgi也会出问题。

你可以指定它作为字符串返回,然后你可以稍后发送标题......

function update($coords) {
       //update the database

       if(statement to understand update is ok){ 
       return 'Location:http://localhost/thisfile.php';
       } else {  
           return false;   
       }
    }

   if($updateresult=update($cords)!=false){ header($updateresult); }

但如果我是你...我会尝试工作ob_start()ob_get_contents()ob_end() 因为这些是控制将发送到浏览器的好方法。正常的mimetypes或标题...无论如何。使用标题和方法时,这是更好的方法html同时输出。

ob_start();  /* output will be captured now */
  echo time();  /* echo test */
  ?>
    print something more...
  <?php  /* tag test */

 /* do some stuff here that makes output. */

$content=ob_get_contents(); 
ob_end_clean();
 /* now everything as output with echo, print or phptags. 
    are now stored into $content variable 
    then you can echo it to browser later 
 */

echo "This text will be printed before the previous code";
echo $content;