Avatar billede jammerlab Nybegynder
09. december 2003 - 21:07 Der er 23 kommentarer og
2 løsninger

While loop

Hvordan for jeg en while loop til at kører engang hver 24. time ?
Avatar billede whatever Nybegynder
09. december 2003 - 21:10 #1
Hvis du skal være 100% sikker på at det køres, skal du sætte en tidsstyret job op på serveren. F.eks. med Cron. Dvs. at Cron på et givent tidspunkt kalder en php-fil, denne indeholder så dit loop.
Avatar billede googolplex Novice
09. december 2003 - 21:11 #2
Hver gang en person besøger din side, tjekker du om der er gået over 24 timer siden din while-loop kørte sidste gang. Hvis der er, så kører du den igen :)

Ellers er det et cron-job :)
Avatar billede jammerlab Nybegynder
09. december 2003 - 21:13 #3
Mit PHP script kører i en consol det vil sige den kører hele tiden... så hvordan laver jeg denne while loop.
Avatar billede jakoba Nybegynder
09. december 2003 - 21:21 #4
Det gør du ikke i php. det skal være et helt script der startes og køres hver gang (med det kode du vil have undeni din løkke).

een måde at lave det er ved at bruge cron-jobs. det er nemt på en unix-baseret server, men duer ikke på windows. Og hvis du bliver hosted er det ret usandsynligt at din vært vil tillade det (du kan nemt komme til at lægge hele serveren ned så alle de andre kunder bliver sure)

Hvor vigtigt er det med 'præcis hver 24 timer', hvis klokkeslettet ikke er vigtig er det nemmest at gøre det i forbindelse med at folk henter sider:

$nu = date( "j" );
$fil = fopen( "sidst_jeg_korte_xjob.txt", "r+" );
$dato = fread( $fil, 1024 );
rewind( $fil );
fwrite( $fil, $nu );
fclose( $fil );
if ( $dato != $nu ) {
        // dette er en ny dato så der er gået ca 24 timer
    include( "din_phpkode_der_skal_udføres_hver_24_timer.php" );
}

mvh JakobA
Avatar billede jammerlab Nybegynder
09. december 2003 - 21:29 #5
Hehe som sagt så kører det i en console... altså det er en IRC bot i PHP... og jeg skal update noget stats hvilket jeg gerne ville gøre hver gang der er gået 1 dag... altså 24 timer... og da filen kun kørers 1 gang skulle den gerne kører hele tiden... loopen altså :P
Avatar billede jakoba Nybegynder
09. december 2003 - 21:35 #6
$sidst = "-2";                      // bare til første gang

while( true ) {
    $nu = date( "j" );              // datoen nu
    if ( $nu != $sidst ) {

        // det du vil have gjort her

        $sidst = $nu;
    }
} //end while

Det er et munumentalt spild af servetid, så jeg tvivler lidt på at du vil blive tilfreds med det.
Avatar billede jammerlab Nybegynder
09. december 2003 - 21:40 #7
Hm.. :/ vil den da kræve meget af serveren? Troede bare man kunne få den til at tælle i sekunder (86400) ... ville det kræve så meget?
Avatar billede jakoba Nybegynder
09. december 2003 - 21:49 #8
problemet er at php ikke har nogen 'vent_indtil( tidspunkt )' funktion der lader andre processer køre imens. Så i løkken ovenover kører php scriptet bare hele tiden. og tester og tester indet til der er gået 24 timer.  Det kaldes 'polling' og er nemt, men ikke smart.

på en windows maskune kan du muligvis køre andre programmer samtidig (windows bruger timer-interrupts til at sørger for at tiden fordeles nogenlunde ligeligt mellem de programmer der bliver startet. Men mange andre steder er man nødt til selv at fortælle i programmet at 'nu skal de andre processer have en chance imens jeg venter' og det kan man altså ikke i php.
Avatar billede jakoba Nybegynder
09. december 2003 - 21:50 #9
men prøv det selv, og se hvad der sker :-))
Avatar billede Slettet bruger
09. december 2003 - 23:13 #10
PHP har da en ganske udmærket sleep(antal sekunder)-funktion. Jeg er helt overbevist om, at PHP ganske frivilligt overlader maskinen til andre programmer, sålænge den "sover".
Avatar billede jpvj Nybegynder
09. december 2003 - 23:16 #11
sandbox> Ja det må man da håbe...

...
sleep(60)
// now go and brew some java :-)
...
Avatar billede jakoba Nybegynder
09. december 2003 - 23:29 #12
Ups. den burde jeg have kendt.
Sæt den ind i løkken ovenfor. (udenfor if sætningen)
Avatar billede jammerlab Nybegynder
10. december 2003 - 16:28 #13
Nu har jeg ikke lige prøvet den endnu... men det lyder som om den sætter pause på alt i scriptet? For jeg har jo en masse koden i samme fil som kører på sammen tid, og som kan kaldes frem ved !command da det jo er en IRC bot. Så hvis den sleep kommer uden for lykken så pauser den alt?
Avatar billede jammerlab Nybegynder
30. december 2003 - 14:40 #14
Når gutter smid et svar så vi kan få lukket det her :)
Avatar billede Slettet bruger
30. december 2003 - 14:44 #15
Fik du det løst?
Avatar billede jammerlab Nybegynder
30. december 2003 - 14:45 #16
Fik aldrig taget mig sammen til at færdig gøre det. Er startet på et andet projekt såå... men jeg går da udfra jakoba's while loop nok skulle havde kunnet klarer den :) sleep funktionen opgav jeg da det lyder som om det stopper hele scriptet.
Avatar billede Slettet bruger
30. december 2003 - 14:53 #17
Så er det vel bare jakoba, du skal have svar fra?

Jeg har jo ikke hjulpet dig, så jeg skal ikke have noget.
Avatar billede jammerlab Nybegynder
30. december 2003 - 14:55 #18
Why not :) Jeg syntes alle gjorde et forsøg... så hvis ikke jakoba brokker sig så deler i da de point ;)
Avatar billede Slettet bruger
30. december 2003 - 14:57 #19
Så giver jeg min andel til jakoba. Hvis du vil godtage det.
Avatar billede jammerlab Nybegynder
30. december 2003 - 14:57 #20
lol ja ok :)
Avatar billede jammerlab Nybegynder
17. april 2004 - 15:22 #21
Så for googolplex dem altså bare :) Gider ikke vente mere. Tak for hjælpen alle.
Avatar billede jammerlab Nybegynder
07. maj 2004 - 10:37 #22
jakoba smid et svar
Avatar billede jakoba Nybegynder
07. maj 2004 - 10:42 #23
Points er rare, selvom jeg har lidt skidt samvittighed over ikke jeg ikke kendte sleep() funktionen.
Avatar billede jammerlab Nybegynder
07. maj 2004 - 10:43 #24
Går nok :) Tak for hjælpen.
Avatar billede Slettet bruger
07. maj 2004 - 12:17 #25
Det er jo længe siden - og nu kender du den ;-)
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