Miten voin tehdä sellaisen laskurin PHP:llä ei MYsQL tietokannalla, koska selainpelini kaikki resurssit aseet yms tallennetaan tekstitiedostoon. Miten saan niin, että 15min välein jokin tietty muuttuja laskee yhdellä numerolla, vaikka käyttäjä ei olisi edes kirjautuneena. Tai edes kone päällä.
Sen jälkeen luonnollisesti sen pitäisi tallentaa se uusi luku tekstitiedostoon vanhan luvun päälle.
Mieluusti kommentoitua koodia. :)
PHP
5
358
Vastaukset
- ratkaista asia
No ota alkuhetkellä time(), tallenna se nimellä time_alkup ja toinen muuttuja time_kertoja. Kun asialla on väliä, (time()-alkuptime)/15*60. Tuo 15*60 on sekunteja, se määrää jakson pituuden. Laske tuon kaavan tulos, vertaa edelliseen time_kertoja arvoon, jos se on noussut, tiedät kuinka monta kertaa 15 minuutin jakso on kulunut. Lopuksi tallenna se time_kertoja uudeksi arvoksi.
Tekstitiedostoissa datan pitäminen on melko riskialtista [jos niihin kirjoitetaan], koska kaksi pelaajaa tulee käyttämään samaa tiedostoa yhtäaikaa, sotkien pelin. Asian voisi korjata mutexilla, mutta tietääkseni PHP:ssä ei ole nättiä tapaa tätä toteuttaa. Yksi ja sama pelaajakin voi aiheuttaa kaksi samanaikaisesti suoritettavaa sivunlatausta, esim. kun verkkoyhteydessä on pieni katkos ja molemmat pyynnöt tulevat lähes samanaikaisesti. Vaikka yrittäisit kikkaillakin, sama ongelma säilyy.
Tietokanta, esim. ilmainen MySQL ratkaisisi ongelman helposti. START TRANSACTION sql:llä ennen muutoksia, ja COMMIT kun muutokset on tehty. Jos tapahtuu virhe, ROLLBACK palauttaa tilanteeseen ennen START TRANSACTIONia.- vaihtoehtoinen tapa
on tehdä cronjob, joka vähentää muuttujia väliajoin.
Eli crontab -e
0,15,30,45 * * * * php /polku/php/tiedostoon/joka/hoitaa/15minuutin/tapahtumat.php
Yhä mutex olisi tarpeen... - tietokantojen
käyttö on minulle outo jutut. Katsoin ohjelmointiputkasta koodivinkkejä, mutta siihen tulee aina teksti, että yhteyttä ei saatu. En ymmärrä.
- keksa
tuo luku kait muuttuu relevantiksi vasta kun käytttäjä seuraavan kerran kirjautuu?
Eikö se voisi olla aikaan sidottu? Lasket sen aina kun käyttäjä pyytää sivua.
Toinen mahis vois olla se crontabin käyttäminen- jo pienen ratkaisun
mutta se on aikaa vievä. Teen niin, että teen päivitys sivun jonne pääsee vain admini ja kun sille sivulle astutaan niin muuttujat päivittyvät uusiin lukemiin :)
Eli aika kehno, mutta toimii väliaikaisesti. :)
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Lääppijä Lindtman jäi kiinni itse teosta
Lindtman kyselemättä ja epäasiallisesti koskettelee viestintäpäällikköä. https://www.is.fi/politiikka/art-20000117808521784082Huomaatteko Demari Tytti ei esitä pahoitteluitaan
Samanlainen ilmeisesti kuin Marin eli Uhriutuu no he ovat Demareita ja muiden yläpuolella siis omasta mielestään823222Vedonlyöntiä .
Olen valmis lyömään ison vedon , että homma kaatuu . Jos kerta Sivonen ei lähde mukaan , niin ei tuoho usko kukaan muuka242396Turvaan tulleet lähettävät omia lapsiaan vaaraan - hullua
MOT-ohjelman jakso ”Loma vaihtui kahleisiin” kertoi, kuinka Suomessa ja muualla Euroopassa asuvat somaliperheet lähettäv542212Mikä on pahinta, mitä kaivatullesi
pelkäät tapahtuvan? Jos kuolemaa, vakavia sairauksia yms. ei lasketa?882075TUNNISTELAATIKKO
Tähän ketjuun voi laittaa yhdellä tai kahdella lauseella (tai vaikka yhdellä sanalla) täydellisen tunnisteen, jonka vain851371Tykkäätkö enemmän tavis- vai julkkiskisaajista tv:ssä?
Tykkäätkö enemmän tavis- vai julkkiskisaajista tv:ssä? Moni reality ja visailuohjelma luottaa julkkiksiin, mutta sentään261290- 401280
Zoo jatkaa - jatkuuko mustamaalaus?
Tänään on päätetty Zoon avaamisesta uudelleen. Mielenkiintoista nähdä kautokurujen reaktio, nyt kun kyse ei ole kunnalli621111Valehdella saa, totuus salataan
Vaikuttaa vähän siltä, että sensuuria toteutetaan juorupalstallakin. Asioita saa kaunistella ja vääristellä, mutta totuu10788