Avatar billede spikebox Nybegynder
19. januar 2009 - 01:49 Der er 7 kommentarer og
1 løsning

Loop igen med højre værdi.

Hej experter :)

Hvordan får jeg det her stykke kode til at loope igen med +100 til der ikke er flere rækker i tabellen, fx kør 1 - 100 lille pause så fra 100 - 200 osv.

Kode:

for ($i = 1; ; $i++) {
    if ($i > 100) {
        break;
    }

$query  = "SELECT id, hostname FROM hostlist WHERE id = $i " ;
$result = mysql_query($query);

while (list($id,$hostname)= mysql_fetch_row($result))
{

if (is_valid_url("http://$hostname"))
{

$status = "HostID:$id&nbsp;DomainName:&nbsp;$hostname&nbsp;This URL s readable<br>";
mysql_query("UPDATE hostlist SET httpstatus = '30.gif'
WHERE hostname = '$hostname' AND id = '$id'");       

} else {
           

$status = "HostID:$id&nbsp;DomainName:&nbsp;$hostname&nbsp;This URL is not readable<br>";
mysql_query("UPDATE hostlist SET httpstatus = '10.gif'
WHERE hostname = '$hostname' AND id = '$id'"); 
     
}

echo "$status";
}

}

mysql_close($conn);
Avatar billede jakobdo Ekspert
19. januar 2009 - 08:17 #1
Noget ala:

<?php
//Forbind til mysql
$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM hostlist"),0);

for($i = 1; $i < $antal; $i++){
    $query  = "SELECT id, hostname FROM hostlist WHERE id = $i LIMIT 1" ;
    $result = mysql_query($query);

    while (list($id,$hostname)= mysql_fetch_row($result)){
        if (is_valid_url("http://$hostname")){
            $status = "HostID:$id&nbsp;DomainName:&nbsp;$hostname&nbsp;This URL s readable<br>";
            mysql_query("UPDATE hostlist SET httpstatus = '30.gif' WHERE hostname = '$hostname' AND id = '$id' LIMIT 1");     
        }else{
            $status = "HostID:$id&nbsp;DomainName:&nbsp;$hostname&nbsp;This URL is not readable<br>";
            mysql_query("UPDATE hostlist SET httpstatus = '10.gif' WHERE hostname = '$hostname' AND id = '$id' LIMIT 1");
        }
        echo "$status";
    }
   
    //Pause på 1 sekund.
    if(($i % 100) == 100){
        sleep(1);
    }
}
mysql_close($conn);
?>

Men hvorfor ikke trække alle rækkerne ud på en gang ?
Avatar billede spikebox Nybegynder
19. januar 2009 - 13:28 #2
Hej jakobdo.
Tak for din fine kode :)

Det med at trække alle rækker ud? Der er ca 700.000, men det er en url checker. Er der en anden måde at gøre det på? Har lavet det samme i c# men det belastede serveren for meget.
Avatar billede jakobdo Ekspert
19. januar 2009 - 13:36 #3
Min kode vil trække antallet ud, hvilket nok kan tage lidt tid, men efterfølgende vil den så trække 100 ud, så den burde faktisk klare opgaven ganske ok.

Gør den ikke det ?
Avatar billede spikebox Nybegynder
19. januar 2009 - 13:45 #4
Hej jakobdo

Jo koden virker perfekt. Har lige et spørsmål til: Nu når jeg lukker min browser så starter den jo forfra næste gang. Kan man gøre noget ved det, måske med en fil hvor den skriver hvor den er nået til? :) Og så lige en sidste ting: Er det muligt at cleare browseren efter et antal så den ikke står og fylder hukommelsen op?
Avatar billede jakobdo Ekspert
19. januar 2009 - 13:52 #5
Browseren og hukommelse skal du ikke tænke på. :o)
Men det med at styre hvor den er nået til, kunne du lave på flere måder.
Du kunne f.eks. lave en tabel, hvor du skriver i hver gang er kørsel slutter.
Så vil du ihf. ikke køre mere end de sidste 100.
Du kunne også lave et felt på hver række, hvor du har last_aktion og updater med:

last_action = NOW()

Så kan du i dit udtræk lave: ORDER BY last_action så vil du altid få dem som er ældst.
Avatar billede spikebox Nybegynder
19. januar 2009 - 14:21 #6
Tak for det jakobdo, skal lige vide hvordan jeg giver point og lukker tråden?
Avatar billede jakobdo Ekspert
19. januar 2009 - 14:32 #7
Svar! og du vælger accepter svar.
Avatar billede jakobdo Ekspert
19. januar 2009 - 14:44 #8
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester