Loop PHP header () ile birlikte iken

3 Cevap php

Temelde böyle bir yapıya sahip bazı noktaları geocode için bir komut dosyası yazdık:

//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')
}

Sorun geocode başarılı ve güncellenen veritabanı ve teh başlık resent bile, komut hala sayfayı yeniden ve yeni bir rekor tekrar başlatmadan tekrar ederken döngüye gider.

PHP için bu normal bir davranış mı? Nasıl böyle davranıyor önlemek mi?

3 Cevap

Başlıktan sonra () kalıp kullanılır (); Senaryoyu ve çıkışını sonlandırmak.

Nasıl böyle davranıyor önlemek mi?

Başlığından sonra exit () () koyun.

another effective way is not to send headers directly in a loop. which is not proper (i couldn't find in php.net manual but i remember it was discussed before in phpusenet). it may act unexpected in different php versions. & different apache ver. installations. php as cgi will make problems too.

Eğer daha sonra daha sonra başlık göndermek dize olarak döndürmek için atayabilirsiniz ...

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); }

but if i were you... i would try to work ob_start() ob_get_contents() ob_end() because those are the excellent way to control what will be sent to browser. normal mimetypes or headers... whatever. it's better way while working with headers & html output at the same time.

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;