hallgeirl Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Hei. Er det noen som har et tips om hvordan jeg kan få PHP til å kjøre et script med jevne mellomrom automatisk, f.eks. hver time? Er det i det hele tatt i PHP jeg skal gjøre det, eller er det muligens noen instillinger på webserveren jeg må gjøre? Jeg VET at det er mulig. Jeg har sett det blitt gjort på noen online spill, bl.a. et ved navn Planetarion, et slags strategispill hvor alle spillerne f.eks fikk penger hver time og slikt. Det kan hende jeg er helt på jordet ang. hva som må til for å få det til, men det er derfor jeg spør Lenke til kommentar
<BøNilzen> Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Tror ikke det går med php siden det ikke er runtime-basert, men blir bare kjørt en gang... Men jeg har ikke peiling på php, så jeg tar sikkert feil Lenke til kommentar
jorgis Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Du kan bruke Cronjobs/crontabs til det, men da må webhotellet ditt ha støtte for det og kjøre unix. Lenke til kommentar
hallgeirl Skrevet 24. juli 2004 Forfatter Del Skrevet 24. juli 2004 Vel, jeg kjører webserveren lokalt på min pc (jeg har ikke webhotell), og jeg kjører windows 2000 :/ Men takk for tipset uansett Lenke til kommentar
???????? Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Det lar seg fortsatt løse. Du kan enten bruke planlagte oppgaver, men den er det vel begrenset hvor mange ganger om dagen du kan kjøre ved mindre du legger til veldig mange oppgaver. Løsning 2 er å sette timeout grensen litt lengre i det scriptet som skal kjøres set_time_limit() og bruke funksjonen sleep(). Da kan du bare få scriptet til å "sove" i et par sekunder, minutter eller timer - så kjøres det igjen. Lenke til kommentar
dostojevski Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Da kan du benytte Task Scheduler i Windows til å kjøre et eller annet hver time. Det enkleste er vel å bruke kommandolinjeversjonen av PHP. Er du SIKKER på at PHP er rett verktøy for jobben? Hva er det du skal gjøre? Lenke til kommentar
Gilbert Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Dette var vel oppe før også, kom vi ikke frem til at et php-skript stopper å kjøre når nettleseren lukkes? Lenke til kommentar
hallgeirl Skrevet 24. juli 2004 Forfatter Del Skrevet 24. juli 2004 dostojevski: det er det jeg ikke er helt sikker på, derfor spør jeg her Det med å bruke php ifra kommando linja hadde jeg forsåvidt ikke tenkt på. det skal prøves fjartan: ja. php scriptet stopper når du lukker nettleseren, men hva om webserveren har oppe en webside som konstant kjører php scriptet jeg hadde tenkt å kjøre? Det jeg har kommet fram til ved hjelp av infoen fra ???????? er å gjøre noe som dette: <?php $ting=0; //skru av time limiten så ikke scriptet stopper etter en stund set_time_limit(0); while (1) { //gjør ting og tang hvert minutt f.eks $ting++; //vent et minutt før scriptet fortsetter sleep(60); } ?> Er det noe som egentlig bør unngås, det å gjøre det på denne måten? Lenke til kommentar
dostojevski Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Uten å påberope meg orakelmyndighet på dette: Jeg mener å tro at å kjøre et slikt script i loop er en ganske ressurskrevende løsning. Som et minimumskrav bør du legge inn en sperre slik at scriptet terminerer hvis det kjøres fra andre iper. Spør igjen: hva skal du gjøre? Er det virkelig NØDVENDIG å kjøre det hvert minutt/time/sekund/etc. ? Mange oppgaver kan løses ved å kalle et script hver gang index-siden lastes, og kjøre oppgaven hvis en tidsgrense er oversteget. <<<nysgjerrig-modus>>> Lenke til kommentar
???????? Skrevet 24. juli 2004 Del Skrevet 24. juli 2004 Dersom du kjører det lokalt på maskinen din er det vel neppe noe særlig problem å kjøre et script som det. Det er litt avhengig av hva scriptet skal gjøre om det er å anbefale å løse det på den måten. Windows og PHP er ikke den beste kombinasjonen for stabilitet, ved mindre du kjører Zend Winenabler - så det kan være lurt å sette en timelimit på scriptet og laste siden manulet en gang i blandt. Lenke til kommentar
mikaelandre Skrevet 25. juli 2004 Del Skrevet 25. juli 2004 når det gjelder ressursbruk ved en slik loop så er jeg ikke helt sikker på hvordan det er i php, men i f.eks. java er det der en helt vanlig måte å gjøre ting på, f.eks. for å tegne på skjermen, og det er ikke spesiellt krevende. Lenke til kommentar
Torbjørn Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 å sleep'e søtt i en time er ikke ressurskrevende, som mikaelandre poengeter er dette vanlig i java, der sover man ofte bare et par millisekunder og maskinen er mer enn uthvilt etter det men du (trådstarter) har fortsatt ikke sagt hva du skal gjøre? Hvis du er usikker på om php er rette verktøy for jobben bør den informasjonen fram... Lenke til kommentar
???????? Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 Problemet er hvis det scriptet skal kjøre i et år av gangen, eller et par måneder. Lenke til kommentar
hallgeirl Skrevet 26. juli 2004 Forfatter Del Skrevet 26. juli 2004 dostojevski: Det jeg hadde tenkt å prøve, er å lage et lite online spill, slik som f.eks planetarion (bare ikke så stooort ). Og da tenkte jeg at jeg skulle kjøre et script f.eks hvert minutt, for å gi hver spiller mer ressurser og slikt og oppdatere alt mulig. Ettersom php ikke er "realtime" så må jeg gjøre det på en slik måte. En ting jeg har tenkt litt på etter jeg lagde denne tråden, er å rett og slett lage et lite program i f.eks c++ ellerno, som kjører et php-script med jevne mellomrom. Når/hvis det blir gjort skal jeg legge det ut på forumet her, i tilfelle noen fler enn meg har tenkt å gjøre det samme (kjøre script med jevne mellomrom) PS: Beklager litt sent svar Lenke til kommentar
laaknor Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 Om du skal lage et online-spill vil jeg _IKKE_ anbefale å kjøre det via et PHP-script; få det ned på assemblernivå, f.eks. via C++. Det du er ute etter er et system som greier å kjøre alle "krigene", tildeling av ressurser etc. i løpet av sekunder. Jeg har laget et online-spill og kjørte det via et cron-script i PHP, noe som tok nærmere 15 sekunder å kjøre når jeg spilte med meg selv...... Gjett hvor lang tid det kommer til å ta hvis du skal faktisk gjøre noe (med 1000 brukere kommer ikke scriptet til å bli ferdig før neste spill begynner...) Men i hvertfall, om du bare skal ha noe enkelt: $run_every = 60; // kjør hvert 60. sekund $q = query("SELECT value FROM config WHERE config = 'last_run'"); $r = fetch($q); if($r->value <= time()-$run_every) { // hvis den sist ble kjørt for mer enn $run_every sekunder siden.... include_once 'script_to_run.php'; query("UPDATE config SET value = value + $run_every WHERE config = 'last_run'"); // Oppdater sist kjørt til sist kjørt + run every, dermed vil scriptet kjøres flere ganger om maskina har stått av/ingen har besøkt siden... } Det blir sånn grovt hvordan det bør gjøres, selv om det ikke er særlig ideelt.... Men var sånn jeg greide å overleve sommerferien på vannet i fjor på en windows 98, 133MHz laptop.... Lenke til kommentar
hallgeirl Skrevet 26. juli 2004 Forfatter Del Skrevet 26. juli 2004 [quote name='laaknor' date='26/07/2004 : 11:18'] Om du skal lage et online-spill vil jeg _IKKE_ anbefale å kjøre det via et PHP-script; få det ned på assemblernivå, f.eks. via C++. Det du er ute etter er et system som greier å kjøre alle "krigene", tildeling av ressurser etc. i løpet av sekunder. Jeg har laget et online-spill og kjørte det via et cron-script i PHP, noe som tok nærmere 15 sekunder å kjøre når jeg spilte med meg selv...... Gjett hvor lang tid det kommer til å ta hvis du skal faktisk gjøre noe (med 1000 brukere kommer ikke scriptet til å bli ferdig før neste spill begynner...) [/quote] Det jeg prøver på er ikke å lage et RTS som f.eks Command & conquer, warcraft, starcraft o.l., men et spill som går over (mye) lengre tid. Sjekk ut www.planetarion.com . Jeg er sikker på at det står mye bedre forklart der enn det jeg klarer å forklare Og det er et spill som har mange tusen spillere. Nå er ikke jeg sikker på om planetarion ER laget i PHP/mysql, men jeg vet om en klone av det spillet (som jeg forøvrig ikke husker navnet på) som er laget i nettopp php og mysql. Jeg er klar over at hvis jeg skal lage et spill som kjører i realtime, som f.eks. C&C, SC eller WC, så går ikke det i PHP. Men det er som sagt ikke det jeg prøver på. Takk for alle svar Lenke til kommentar
laaknor Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 Jeg har skjønt det. Spilte Planetarion, nukezone.nu og dawnofmyth en stund, så jeg veit hva slags spill det er. nukezone er laget i ASP planetarion er laget i Perl ser det ut til og dawnofmyth er laget i PHP (veit dog at backenden kjører i C) Men fortsatt, det du trenger er å ha en backend som gir penger/ticks ol. i løpet av max 2 sekunder. Ellers kan man utnytte (akkurat hvordan det kan utnyttes er litt avhengig av hvordan systemet programmeres.) Du kan godt lage et realtimespill i PHP, men du vil nok ha problemer med å lage noe annet enn tekstbaserte systemer (okey, du kan lage dynamiske bilder/flashanimasjoner med det, men du vil nok få problemer med at du ikke får plass til flere maskiner i clusteret som trengs for å drive det etterhvert). Lenke til kommentar
hallgeirl Skrevet 26. juli 2004 Forfatter Del Skrevet 26. juli 2004 Aha. Nå skjønner jeg hva du mener. Men kan virkelig et php script som kjører igjennom tabellene i mysql og oppdaterer dem (legger til ressurser osv.) virkelig være så tregt? Dette er jo ikke et prosjekt som jeg forventer å bli veldig stort, for meg er det for det meste bare et prosjekt som jeg har hatt lyst til å få til, for morro skyld liksom. Lenke til kommentar
laaknor Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 Ja, det blir tregt fordi all koden må kjøres nedover fra selve scriptet, mot PHP-enginen, gjøres om til assembler og kjøres for hver gang scriptet starter. Det er mye jobb for maskina, og det tar tid. Det er derfor en fordel å få det direkte ned i assembler så man slipper å kompilere scriptet hele tiden (okey, PHP cacher noe og kompilerer bare dersom det ikke har vært gjort noen endringer på scriptet, men det tar fortsatt tid å sjekke om det har skjedd endringer). Lenke til kommentar
hallgeirl Skrevet 26. juli 2004 Forfatter Del Skrevet 26. juli 2004 Mhm.. skjønner. Takk for tipsene Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå