Diskuze: Čas
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 45 zpráv z 45.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
U některých webhostingů máš v administraci záložku CRON a tam můžeš
nacpat url, které se má v nějakém intervalu volat
ak by som mal CRONom spúšťanú úlohu v www.domena.sk/uloha.php, a niekto by v prehliadači otvoril túto úlohu www.domena.sk/uloha.php, znamenalo by to spustenie úlohy užívateľom?
Ano. Můžeš tam nacpat klíč přes GET, se kterým to budeš spouštět z
CRONu a bez něj se to neprovede
dík, toto sa určite zíde
Nevím, jestli to je ideální technika, ale mě nikdy nic lepšího nenapadlo.
mám obavu že mi niekto zistí prítomnosť súborov ako www.domena.sk/uloha.php
a potom zneužije
názov premennej v $_GET poznám len ja, a ktomu do nej môžem vložiť kľúč
idem pozrieť či je niečo o CRONe v článkoch
Podívej se na výstup PHP funkce GetAllHeaders(), když ten skript zavolá Cron. Když k tomu přidáš ještě nějaký token, tak by to mělo stačit.
V podstatě by se to dalo vyřešit ošetřením IP adresou, povolil bys to jednoduše pouze pro server..
Jde to třeba přes htaccess - ten PHP soubor hodíš do nějaké složky, vedle něj vytvoříš htaccess, do kterého vložíš
Deny from all
Allow from 127.0.0.1
(což by mělo fungovat) - když ten soubor bude chtít otevřít někdo jiný než server, vyhodí to 403
[me|]270[/me|],Neaktivní uživatel,[me|]9206[/me|]: dík za odpovede! určite
to niekedy použijem
Zkus napsat, jak by sis to představoval, co by bylo generátorem události.
a jak to tam vlastně funguje? cron sputí script a po dokončení čeká na
další interval kdy ho má znovu spustit?
takže by stačilo ty funkce dát do smyčky?
Ne. Například každých 10 minut spustí skript bez ohledu na to, zda ten předchozí doběhl či ne. Může takhle naráz spustit třeba 1000 skriptů a za 10 minut (tedy v 10., 20., 30., 40., 50., 60. minutě každé hodiny) zase.
a kdyby se jednalo např v nějaké web hře o to že několik něčeho za určitý čas přibude tak by bylo dobré aby byl update řekněme co 1s pokud by to bylo pro hodně účtů
kazdych 10 minut 1000 skriptov naraz? nezatazilo by to neunormne systemove
prostriedky?
ved pomocou crun sa spustaju aj ine veci na udrzbu systemu, napr. sledovanie
update aplikacii na serveri,...
To se dělá jinak. Když hráč na něco klikne, tak se změří čas od posledního kliknutí a peníze či materiál se dopočítají.
tahle varianta mě napadla ale je pro mě (lenivce) poměrně zdlouhavé
naprogramovat
Ubuntu na mém notebooku přežilo už horší věci. Takový server s tím problémy nemá.
Ono to není zas tak těžké. Zvládne to i malá vnořená procedura v databázi.
pro HW ne ale pro mě jako programátora dělat hafo funkcí ktere budou
dělat tolik věcí já
rád píšu co nejjednodušeji, proto hledám i nejjednodužší řešení
to s tím počítáním času mi příde jako nejméně náročne pro HW ale
náročné na sepsání
Počítej s tím, že jako webmaster se musíš naučit 7 jazyků, které musíš správně zkombinovat, aby to celé fungovalo jako jedna webová prezentace.
- Apache (.htaccess)
- PHP
- MySQL
- HTML
- CSS
- Javascript
- případně nějaký šablonovací jazyk nebo framework
takže už se jen doučit pořádně php, přejít s postgreSQL na mySQL a
hudá na apache a JS... už se těším
PosgreSQL je sice lepší než MySQL, ale většina hostingů umí bohužel jen MySQL.
Pokud umíš PosgreSQL a nechceš dělat příliš komplikované dotazy (u webů se stejně nedělají) tak můžeš zkusit SQLite. Používá téměř plnohodnotný jazyk SQL, je velmi podobný PosgreSQL, jen má méně funkcí. V případě potřeby se však chybějící funkce dají dopsat v PHP. Z PHP se používá stejný ovladač: PDO.
syntaxí jsou si podobné tak jen zjistit co je jinak atd a bude
Hlavní rozdíl je v tom, že SQLite není server, ale že běží uvnitř PHP. Má to své výhody i nevýhody.
"To se dělá jinak. Když hráč na něco klikne, tak se změří čas od posledního kliknutí a peníze či materiál se dopočítají."
Zrovna takovou hru děláme. Ostatní hráči potřebují operovat s některými tvými proměnnými, takže bys to musel dopočítávat dost často. Typická situace je třeba útok na tvojí vesnici, kde jsi dal něco stavět, před útokem se musí spočítat co tam je postavené, aby se to případně zničilo. Lepší je dát tam minutový cron a mít všechna data v reálném čase, brutálně se to zjednoduší.
Tohle není problém, protože se to dopočítává automaticky při každém dotazu na stav hráče. Cron není potřebný.
Vrstva co to dopočítává bude při komplexnosti hry vždy složitější než cron, co by to jednoduše vykonával z nějaké fronty dějů.
SELECT stav+prirustek*TIMESTAMPDIFF(second, timestamp, now()) AS body FROM hrac WHERE id=$id;
Co je na tom složitého? Díky této prkotině se můžeš zbavit cronu. Můžeš si to dát i do VIEW.
Mohu tě ujistit, že u reálné hry by ten dotaz takhle nevypadal Viděl jsem dotazy travian-like
hry, která byla dělána tímto způsobem. Proto jsem to udělal přes
cron.
A já tě zase mohu ujistit, že jsem ten SELECT napsal záměrně jednoduše, aby to bylo pochopitelné. Místo jednoho sloupce jsou tam prostě dva plus timestamp. Jejich hodnoty se modifikují pouze při modifikaci jiných položek v záznamu. Pokud máš správně udělanou normalizaci, tak to není nic složitého. Modifikují se záznamy jen těch hráčů, kteří skutečně hrají. Hra dokonce běží i tehdy, když má server odstávku.
Mně je to jedno, jistě takovou hru také programuješ a víš co tam je třeba řešit. Jen jsem chtěl poukázat na další možné řešení, které je také správné, ačkoli ty to uznat asi nedokážeš.
Zobrazeno 45 zpráv z 45.