我编写了一个脚本来对某些点进行地理编码,这些点的结构基本上是这样的:
//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的正常行为吗?我如何避免它表现得像这样?
答案 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;