/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
snydecron (auto-nulstilling) gennem php
Fra : Jacob Larsen


Dato : 04-11-03 20:56

Hej.

Er der nogen, der har et forslag til hvordan jeg laver et "fake cronjob" i
php (+ evt. mysql).

Jeg har en topliste som skal nulstilles en gang hver uge (f.eks. hver nat
mellem Søndag-Mandag). Jeg vil ikke køre det med et cronjob, da scriptet
skal kunne bruges mange steder der ikke har adgang til cron.

Hvordan kan jeg bruge den aktuelle tid og databasen til at sikre denne
nustilling af toplisten foregår første gang en bruger kommer ind på listen
efter kl. 12 denne nat? Selvfølgelig helst på en pæn måde
--
mvh. Jacob Larsen



 
 
Jacob Atzen (04-11-2003)
Kommentar
Fra : Jacob Atzen


Dato : 04-11-03 21:16

"Jacob Larsen" <jacobl@(((FJERNDETTE)))cs.auc.dk> writes:

> Hej.
>
> Er der nogen, der har et forslag til hvordan jeg laver et "fake cronjob" i
> php (+ evt. mysql).
>
> Jeg har en topliste som skal nulstilles en gang hver uge (f.eks. hver nat
> mellem Søndag-Mandag). Jeg vil ikke køre det med et cronjob, da scriptet
> skal kunne bruges mange steder der ikke har adgang til cron.
>
> Hvordan kan jeg bruge den aktuelle tid og databasen til at sikre denne
> nustilling af toplisten foregår første gang en bruger kommer ind på listen
> efter kl. 12 denne nat? Selvfølgelig helst på en pæn måde

Kan du ikke bare gemme en $last_reset variabel med et tidspunkt et
sted?

--
Med venlig hilsen
- Jacob Atzen

Jacob Larsen (04-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 04-11-03 21:45

>> Hvordan kan jeg bruge den aktuelle tid og databasen til at sikre
>> denne nustilling af toplisten foregår første gang en bruger kommer
>> ind på listen efter kl. 12 denne nat? Selvfølgelig helst på en pæn
>> måde
>
> Kan du ikke bare gemme en $last_reset variabel med et tidspunkt et
> sted?

Jo, hvis man gør dette, er det nemt nok at sørge for at opdateringen sker
med minimun den fastsatte grænse. Hvis man altså sætter $last_reset til den
aktuelle tid, når man opdager grænsen er overskredet. Men hvis den første
bruger kommer ind kl. 00:10 vil den næste reset ugen efter, først kunne ske
ved dette klokkeslet og ikke kl. 00:00 som det var tænkt.

Dette kan så løses ved at sætte $last_reset til værdien fra natten til
mandag kl. 00:00, men hvordan sætter jeg variablen til altid at være det
timestamp fra kl 00:00 natten til mandag også selvom det første besøg kommer
f.eks. onsdag kl. 14:00. Dette må man vel kunne gøre hvis man kender det
aktuelle tidspunkt, men jeg kan ikke lige se hvordan.

Man kunne vel kode det med en funktion, der trækker alle sekunder fra denne
uge fra et det aktuelle tidspunkt baseret på ugedagen og tidspunktet, men er
der ikke en mere universal måde, som virker selvom administratoren af
toplisten sætter sin reset-time til f.eks. 2 uger eller måske en hel måned?
--
mvh. Jacob Larsen



Jacob Larsen (04-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 04-11-03 22:01

>> Kan du ikke bare gemme en $last_reset variabel med et tidspunkt et
>> sted?
>
> Jo, hvis man gør dette, er det nemt nok at sørge for at opdateringen
> sker med minimun den fastsatte grænse. Hvis man altså sætter
> $last_reset til den aktuelle tid, når man opdager grænsen er
> overskredet. Men hvis den første bruger kommer ind kl. 00:10 vil den
> næste reset ugen efter, først kunne ske ved dette klokkeslet og ikke
> kl. 00:00 som det var tænkt.
>
> Dette kan så løses ved at sætte $last_reset til værdien fra natten til
> mandag kl. 00:00, men hvordan sætter jeg variablen til altid at være
> det timestamp fra kl 00:00 natten til mandag også selvom det første
> besøg kommer f.eks. onsdag kl. 14:00. Dette må man vel kunne gøre
> hvis man kender det aktuelle tidspunkt, men jeg kan ikke lige se
> hvordan.
>
> Man kunne vel kode det med en funktion, der trækker alle sekunder fra
> denne uge fra et det aktuelle tidspunkt baseret på ugedagen og
> tidspunktet, men er der ikke en mere universal måde, som virker
> selvom administratoren af toplisten sætter sin reset-time til f.eks.
> 2 uger eller måske en hel måned?

Det var nok lidt rodet forklaret

Den korte udgave er: Hvordan laver man dynamisk et timestamp fra sidste
søndag nat kl 00:00 ud fra den aktuelle tid?
--
mvh. Jacob Larsen



Jacob Atzen (04-11-2003)
Kommentar
Fra : Jacob Atzen


Dato : 04-11-03 22:02

"Jacob Larsen" <jacobl@(((FJERNDETTE)))cs.auc.dk> writes:

> Jo, hvis man gør dette, er det nemt nok at sørge for at opdateringen sker
> med minimun den fastsatte grænse. Hvis man altså sætter $last_reset til den
> aktuelle tid, når man opdager grænsen er overskredet. Men hvis den første
> bruger kommer ind kl. 00:10 vil den næste reset ugen efter, først kunne ske
> ved dette klokkeslet og ikke kl. 00:00 som det var tænkt.
>
> Dette kan så løses ved at sætte $last_reset til værdien fra natten til
> mandag kl. 00:00, men hvordan sætter jeg variablen til altid at være det
> timestamp fra kl 00:00 natten til mandag også selvom det første besøg kommer
> f.eks. onsdag kl. 14:00. Dette må man vel kunne gøre hvis man kender det
> aktuelle tidspunkt, men jeg kan ikke lige se hvordan.
>
> Man kunne vel kode det med en funktion, der trækker alle sekunder fra denne
> uge fra et det aktuelle tidspunkt baseret på ugedagen og tidspunktet, men er
> der ikke en mere universal måde, som virker selvom administratoren af
> toplisten sætter sin reset-time til f.eks. 2 uger eller måske en hel måned?

if($now > $next_reset) {
reset_database();
$next_reset = $next_reset + $interval;
}

Sådan?

Kig evt. lidt på date() og strtotime().

--
Med venlig hilsen
- Jacob Atzen

Jacob Larsen (04-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 04-11-03 22:26

>> Jo, hvis man gør dette, er det nemt nok at sørge for at opdateringen
>> sker med minimun den fastsatte grænse. Hvis man altså sætter
>> $last_reset til den aktuelle tid, når man opdager grænsen er
>> overskredet. Men hvis den første bruger kommer ind kl. 00:10 vil den
>> næste reset ugen efter, først kunne ske ved dette klokkeslet og ikke
>> kl. 00:00 som det var tænkt.
>>
>> Dette kan så løses ved at sætte $last_reset til værdien fra natten
>> til mandag kl. 00:00, men hvordan sætter jeg variablen til altid at
>> være det timestamp fra kl 00:00 natten til mandag også selvom det
>> første besøg kommer f.eks. onsdag kl. 14:00. Dette må man vel kunne
>> gøre hvis man kender det aktuelle tidspunkt, men jeg kan ikke lige
>> se hvordan.
>>
>> Man kunne vel kode det med en funktion, der trækker alle sekunder
>> fra denne uge fra et det aktuelle tidspunkt baseret på ugedagen og
>> tidspunktet, men er der ikke en mere universal måde, som virker
>> selvom administratoren af toplisten sætter sin reset-time til f.eks.
>> 2 uger eller måske en hel måned?
>
> if($now > $next_reset) {
> reset_database();
> $next_reset = $next_reset + $interval;
> }
>
> Sådan?

Nej desværre. Her vil næste reset først ske kl 00:10 næste uge hvis den
første bruger denne uge kommer ind netop kl 00:10 (altså hvis $interval er
en uge). Det interval jeg skal lægge til det nuværende skal således afpasses
til at igen pege på kl 00:00 (altså i dette tilfælde være 10 min mindre end
hvis den første bruger var kommer ind kl. 00:00 præcis)

> Kig evt. lidt på date() og strtotime().

Havde ikke lige tænkt på at date() kunne bruges, da jeg kun havde fokuseret
på mktime og lign. Jeg har derfor kigget lidt nærmere på den besværlige
udgave (uvist om den nemme udgave findes . Det kan laves gennem numerisk
repræsentation af ugedage, som med lidt besvær kan bestemme hvor lang tid
der er gået i denne uge. Denne tid kan trækkes fra aktuelt timestamp og man
har et timestamp man kan teste mod til næste gang. Denne udgave skulle ikke
forskubbe noget.

Ved ikke om nogen gad høre det, men nu er det skrevet

Det hele er lidt nemmere med internt (sikkert) cron. Der er bare ikke mange
danske udbydere, der har denne mulighed

Tak for inputtet.
--
mvh. Jacob Larsen



Jacob Atzen (04-11-2003)
Kommentar
Fra : Jacob Atzen


Dato : 04-11-03 22:38

"Jacob Larsen" <jacobl@(((FJERNDETTE)))cs.auc.dk> writes:

> > if($now > $next_reset) {
> > reset_database();
> > $next_reset = $next_reset + $interval;
> > }
> >
> > Sådan?
>
> Nej desværre. Her vil næste reset først ske kl 00:10 næste uge hvis den
> første bruger denne uge kommer ind netop kl 00:10 (altså hvis $interval er
> en uge). Det interval jeg skal lægge til det nuværende skal således afpasses
> til at igen pege på kl 00:00 (altså i dette tilfælde være 10 min mindre end
> hvis den første bruger var kommer ind kl. 00:00 præcis)

Du læser vist ikke koden

Såfremt start grænsetidspunktet ($next_reset) er initialiseret
korrekt, til f.eks. kl. 00.00 sidste søndag og du lægger 7 dage
($interval) til så vil den være kl. 00.00 næste søndag - ligegyldigt,
hvilket tidspunkt ($now) brugeren ankommer på.

Du kan evt. bruge "while" istedet for "if" i tilfælde af, der går
længere end $interval imellem to brugere besøger siden.

--
Med venlig hilsen
- Jacob Atzen

Jacob Larsen (04-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 04-11-03 23:09

>>> if($now > $next_reset) {
>>> reset_database();
>>> $next_reset = $next_reset + $interval;
>>> }
>>>
>>> Sådan?
>>
>> Nej desværre. Her vil næste reset først ske kl 00:10 næste uge hvis
>> den første bruger denne uge kommer ind netop kl 00:10 (altså hvis
>> $interval er en uge). Det interval jeg skal lægge til det nuværende
>> skal således afpasses til at igen pege på kl 00:00 (altså i dette
>> tilfælde være 10 min mindre end hvis den første bruger var kommer
>> ind kl. 00:00 præcis)
>
> Du læser vist ikke koden
>
> Såfremt start grænsetidspunktet ($next_reset) er initialiseret
> korrekt, til f.eks. kl. 00.00 sidste søndag og du lægger 7 dage
> ($interval) til så vil den være kl. 00.00 næste søndag - ligegyldigt,
> hvilket tidspunkt ($now) brugeren ankommer på.
>
> Du kan evt. bruge "while" istedet for "if" i tilfælde af, der går
> længere end $interval imellem to brugere besøger siden.

*LOL* Ok, sådan. Et sikkert tegn på, jeg har siddet og kodet for meget med
countdown variable i C++, så jeg ikke fangede den med timestamps.
Antog bare de betød det samme uden at tænkte mig om

Tak for hjælpen.
--
mvh. Jacob Larsen



Michael Bested (05-11-2003)
Kommentar
Fra : Michael Bested


Dato : 05-11-03 15:01

Hej...

Du kan også bare lave det med Windows' planlagte opgaver.

Så beder du den bare køre hver uge på et bestemt tidspunkt
og køre filen:

C:\php\php.exe C:\www\phpfil.php

--
Mvh.
Michael Bested
michael@bested.net


"Jacob Larsen" <jacobl@(((FJERNDETTE)))cs.auc.dk> skrev i en meddelelse
news:bo903l$e3p$1@sunsite.dk...
> Hej.
>
> Er der nogen, der har et forslag til hvordan jeg laver et "fake cronjob" i
> php (+ evt. mysql).
>
> Jeg har en topliste som skal nulstilles en gang hver uge (f.eks. hver nat
> mellem Søndag-Mandag). Jeg vil ikke køre det med et cronjob, da scriptet
> skal kunne bruges mange steder der ikke har adgang til cron.
>
> Hvordan kan jeg bruge den aktuelle tid og databasen til at sikre denne
> nustilling af toplisten foregår første gang en bruger kommer ind på listen
> efter kl. 12 denne nat? Selvfølgelig helst på en pæn måde
> --
> mvh. Jacob Larsen
>
>



Jacob Larsen (05-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 05-11-03 17:12

> Du kan også bare lave det med Windows' planlagte opgaver.
>
> Så beder du den bare køre hver uge på et bestemt tidspunkt
> og køre filen:
>
> C:\php\php.exe C:\www\phpfil.php

Kan ikke rigtigt lade sig gøre, da det kører på en unix-server hos en
webhost. Hvis jeg havde en win-server ville det være cool, men det er jo det
samme, som hvis mit webhotel havde cron jobs. Til opdatering af lokale filer
eller f.eks. daglig automatisk upload vha. ftp er det ok.
--
mvh. Jacob Larsen



Kim Emax (05-11-2003)
Kommentar
Fra : Kim Emax


Dato : 05-11-03 19:30

Jacob Larsen wrote:

> Kan ikke rigtigt lade sig gøre, da det kører på en unix-server hos en
> webhost. Hvis jeg havde en win-server ville det være cool, men det er
> jo det samme, som hvis mit webhotel havde cron jobs. Til opdatering
> af lokale filer eller f.eks. daglig automatisk upload vha. ftp er det
> ok. --

Du kunne også vælge en udbyder, der tilbyder at køre cronjobs?

--
Take Care
Kim Emax - master|minds: http://www.masterminds.dk
http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Jacob Larsen (05-11-2003)
Kommentar
Fra : Jacob Larsen


Dato : 05-11-03 19:53

>> Kan ikke rigtigt lade sig gøre, da det kører på en unix-server hos en
>> webhost. Hvis jeg havde en win-server ville det være cool, men det er
>> jo det samme, som hvis mit webhotel havde cron jobs. Til opdatering
>> af lokale filer eller f.eks. daglig automatisk upload vha. ftp er det
>> ok. --
>
> Du kunne også vælge en udbyder, der tilbyder at køre cronjobs?

På den anden måde kan jeg jo smide koden på nettet og lade andre bruge den,
hvor der ikke er adgang til cron, hvis jeg vil.

Jeg vil dog gerne have en host, der tilbyder cronjobs, man selv kan sætte op
(f.eks. gennem kontrolpanel eller shell-adgang over ssh). Kender du nogle
gode, der er til at betale? Det er nemt nok i udlandet, men i Danmark er det
vist ikke så nemt, så jeg har en ekstern server til at køre cron.
--
mvh. Jacob Larsen



Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste