[php] Turn script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben de hele middag bezig geweest om een turn systeem te bedenken en te scripten, tot nu toe zonder enig suc6.

wat moet dit script kunnen:
- elke 6 uur een bepaald aantal turns aan een database toevoegen.
- dit script moet altijd lopen ook als niemand op de website is ingelogd of er iets mee doet.

Het database gedeelte is geen probleem. Het enige probleem is dat ik geen script krijg bedacht/ontworpen dat elke 6 uur een anders script laat lopen en weer overnieuw begint zonder dat ik iets hoef te doen.

Ik weet dat dit nogal een nooberige vraag is maar ik krijg het zelf niet voorelkaar. Een paar aanwijzingen in de goede richting zouden me best op weg kunnen helpen.

Acties:
  • 0 Henk 'm!

Verwijderd

Het makkelijkste is nog om gewoon een pagina op de server te draaien die elke 6 uur de pagina refresht (Javascript setTimeOut werkt ook bij 6 uur????).

edit:

voorbeeld

[ Voor 25% gewijzigd door Verwijderd op 22-01-2005 15:53 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

cron (unix/linux/bsd) of scheduler (windows)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 15:47:
Het makkelijkste is nog om gewoon een pagina op de server te draaien die elke 6 uur de pagina refresht (Javascript setTimeOut werkt ook bij 6 uur????).
Dat is dus een belachelijke oplossing. Dat zou betekenen dat er altijd iets of iemand een webpagina open moet hebben.

Als je een Linux server hebt draaien, dan kun je waarschijnlijk wel een cronjob maken (man crontab) die elke 6 uur een PHP script aanroept.
Op een Windows server kan hetzelfde met de taakplanner.

Zo maak je op de server gebruik van een service die op bepaalde tijden een PHP script aanroept via de command line.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 15:51:
Dat is dus een belachelijke oplossing. Dat zou betekenen dat er altijd iets of iemand een webpagina open moet hebben.
Belachelijk is denk ik wat overdreven hoor :P Het script doet toch niets die 6 uur. En als je die pagina op de server laat draaien heeft niemand er toch last van.

Maar ik geef toe dat jouw oplossing iets netter is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De server draai ik zelf niet die word gehost en ik neem aan dat ik op die servers niet eventjes een programma kan installeren of zit ik er nu totaal naast

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 15:54:
[...]

Belachelijk is denk ik wat overdreven hoor :P Het script doet toch niets die 6 uur. En als je die pagina op de server laat draaien heeft niemand er toch last van.

Maar ik geef toe dat jouw oplossing iets netter is.
Iets netter?
Lichtjaren netter!

Ik denk dat je die hoster best kan vragen iets als 'wget http://host/script.php' in de crontab te zetten en ieder uur uit te laten voeren.

[ Voor 15% gewijzigd door Verwijderd op 22-01-2005 15:58 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Een goede host heeft eigenlijk altijd de mogelijkheid om cronjobs te kunnen draaien, cron staat op ongeveer elk unix/linux systeem geinstalleerd dus ook dat zou geen probleem moeten zijn.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik geef je helemaal gelijk :P

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 15:55:
De server draai ik zelf niet die word gehost en ik neem aan dat ik op die servers niet eventjes een programma kan installeren of zit ik er nu totaal naast
Wie zegt dat dat nodig is? Je kunt nu zelf nagaan wat er precies mogelijk is op de server. Je hebt een paar zoekwoorden, je kunt contact opnemen met de hosting provider, het lijkt me dat je weer even genoeg hebt uit te zoeken. :)
Verwijderd schreef op zaterdag 22 januari 2005 @ 15:57:

Iets netter?
Lichtjaren netter!

Ik denk dat je die hoster best kan vragen iets als 'wget http://host/script.php' in de crontab te zetten en ieder uur uit te laten voeren.
Ik houd het voorlopig op:
code:
1
2
$ crontab -e
0 0,6,12,18 * * * /usr/bin/php -q /pad/naar/script.php

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dus gewoon een sript schrijven dat door de host elke 6 uur gedraait word waarin staat dat er een waarde naar de db moet worden geschreven.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 22 januari 2005 @ 16:01:
Ik houd het voorlopig op:
code:
1
2
$ crontab -e
0 0,6,12,18 * * * /usr/bin/php -q /pad/naar/script.php
Als ik die hoster was deed ik toch een wget. Heb je geen gezeur met environmentinstellingen en de user waaronder het script draait.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op zaterdag 22 januari 2005 @ 16:44:
[...]

Als ik die hoster was deed ik toch een wget. Heb je geen gezeur met environmentinstellingen en de user waaronder het script draait.
Met de kans dat iemand de link naar je update script vindt en misbruikt.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • JasperE
  • Registratie: December 2003
  • Laatst online: 11-09 18:26
wget = gebruik van bandbreedte, lokaal verkeer welliswaar maar het zal waarsch. wel meetellen voor je maandelijkse limiet.

Ik zou dus voor /usr/bin/php gaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Grijze Vos schreef op zaterdag 22 januari 2005 @ 17:03:
Met de kans dat iemand de link naar je update script vindt en misbruikt.
PHP:
1
2
if ($_SERVER[REMOTE_ADDR] != '127.0.0.1') 
                die("Scheer je weg, snoodaard!");


Pfjoew, net op tijd! :)

[ Voor 8% gewijzigd door Verwijderd op 22-01-2005 18:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

OD-Frozen schreef op zaterdag 22 januari 2005 @ 17:06:
wget = gebruik van bandbreedte, lokaal verkeer welliswaar maar het zal waarsch. wel meetellen voor je maandelijkse limiet.

Ik zou dus voor /usr/bin/php gaan.
OK, GET requestje, wat zal het wezen? 512 bytes per 6 uur?

Betekent het gebrek aan goeie tegenargumenten dat ik gelijk heb? ;)

(zo'n belangrijk verschil is het nou ook weer niet, ik zou persoonlijk een colo host nemen, kun je net zoveel transferen over je lo als je wilt ;))

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Als die hoster geen zin heeft om rechten e.d. goed in te stellen voor zoiets simpels mag hij zichzelf geen normale serverbeheerder noemen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

drm schreef op zaterdag 22 januari 2005 @ 18:09:
Als die hoster geen zin heeft om rechten e.d. goed in te stellen voor zoiets simpels mag hij zichzelf geen normale serverbeheerder noemen.
Een goeie beheerder is KISS (keep it simple, stupid)!

Een crontab/wget entry is no-risk voor de beheerder en (max) 1 minuutje werk, ideaal dus...

Gerommel met rechten is leuk, maar laat dat nou net het onderdeel van het beheerswerk zijn waar de meeste fouten in gemaakt worden...

PS: Ik ben eigenlijk bang dat veel hosters helemaal niet mee willen werken aan dat soort dingen, kun je gelukkig altijd nog zo'n wget van huis af draaien.

Acties:
  • 0 Henk 'm!

  • Sfynx
  • Registratie: Augustus 2001
  • Niet online
Is dit iets a la Utopia of Earth van Swirve games?

Is het niet een idee om het checken/toevoegen van turns te doen elke keer wanneer een gebruiker een pagina opvraagt? Natuurlijk, wanneer er dan niemand het systeem gebruikt worden er geen turns toegevoegd, maar dat hoeft dan ook niet omdat niemand het systeem gebruikt om iets met die turns te doen ;)

Je laat bij elke pageview (in een geinclude header file dus) eerst checken of er turns toegevoegd moeten worden bij iedereen, en hoeveel dan wel niet, en dan pas de overige dingen doen. Wanneer er voor t laatst turns toegevoegd zijn houd je bij in de database. Met een cronjob heb je het probleem dat wanneer cron er even uitligt om wat voor reden dan ook, dat mensen geen turns krijgen... hiermee dus niet.

Je moet in dit geval wel goed denken aan het feit dat het mogelijk is dat er een nieuwe pageview plaats kan vinden als de vorige nog bezig is de turns te verhogen, en dit dus niet meerdere keren mag gebeuren (omdat de code bij de tweede pageview denkt dat het nog niet gebeurd is/aan het gebeuren is), bijvoorbeeld door een lock op de betreffende tabel(len).

En sowieso het updaten van de turns doen als 1 database-transactie als je gebruik maakt van meerdere queries, zodat er een automatische rollback plaatsvindt als het halverwege wordt afgebroken op 1 of andere reden (je wil niet dat de 1 dan wel extra turns heeft en de ander niet, of dat de turns tooegevoegd zijn, maar de tijd niet is bijgewerkt, etc etc ;)). Ondersteunt de database server dat niet? Andere host zoeken/database server installeren.

[ Voor 28% gewijzigd door Sfynx op 22-01-2005 20:53 ]


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 21:22
Sfynx > het probleem van jouw oplossing is dat het niet mer werkt als er veel usres zijn. De ene user die die pagina opvraagt, moet dan namelijk wachtne tot alle database-entrys zijn geupdate. En dat is met een paar duizend spelers al gauw een behoorlijke tijd.

Het is dus veel netter om het van een eigen server af te draaien dmv een cronjob of taakplanner.

Wat je ook kunt doen is als je thuis een klein servertje hebt draaien die gewoon in een cronjobje of taakplanner-entry maken die via http een pagina opvraagt ofzo. Legio mogelijkheden.

Verbouwing

Pagina: 1