Autor Zpráva
DJ_Ironic
Profil *
Dobrý den, potřebuji vyrobit nějaký PHP (klidně i jiný kód), který by mi dovolil nechat na webu běžet čas. Ten čaj je však nutné modifikovat. Například aby šel zrychlit, zpomalit a úplně zastavit. (zrychlení a zpomalení stačí například 2x,3x,10x). Nutné však je, aby čas běžel stále a kdykoliv si někdo načte stránku. Ukázal by se mu ten "aktuální čas. => Aby to na serveru běželo nezávisle na loadu stránky. Víte jak na to ? Budu opravdu rád za každou pomoc.

Šimon Čecháček
juriad
Profil
To PHP neumí. To se spouští pokaždé znovu s novým requestem. Můžeš si však někam uložit trojici: čas uložení značky, časovou značku a rychlost času, a aktuální čas z nich vypočítat.
$aktualniCas = $znacka + ($ted - $casUlozeni) * $rychlost;
Při každé změně rychlosti prostě tuto trojici přepíšeš novými údaji.
DJ_Ironic
Profil *
Vím že se teď budu ptát jako idiot, ale potřebuji s tím nějak pomoct. Nepotřebuji aby to bylo PHP, všechno co dokáže běžet na hostingu pipni.cz nebo hostinger je v pořdáku. jen potřebuji pomoct s tím kódem. Ano, jsem blbec ale už si tu lámo hlavu jak dlouho a furt nevím jak na to.
Díky moc
juriad
Profil
Na hostingu taková možnost neexistuje. Musel bys mít celý server (VPS) a napsat si vlastní program (ne v PHP), který bys tam spustil a se kterým by PHP komunikovalo. Toto nechceš dělat.

„Aktuální čas“ prostě vypočítávej z okamžitého času a rychlosti tak, jak jsem napsal v [#2].
Keeehi
Profil
juriad:
Myslím že DJ_Ironic jde spíš o zobrazení běžícího času v prohlížeči (takže javascript). Ovšem díky té změně rychlosti to bude odchýlené od aktuálního času takže to možná bude chtít si pamatovat, kde to posledně skončilo.

DJ_Ironic:
K čemu to má sloužit? Kdo to bude ovládat? Mají všichni vidět jeden stejný čas, nebo to má každému zobrazovat něco jiného? Jak přesné to musí být (vteřiny/tisíciny vteřin/jjiná přesnost)?
midlan
Profil
Do databáze ukládat násobiče a k nim datum+čas od kdy do kdy. Pak udělej sumu pronásobených intervalů menších než NOW(). Výsledek + aktuální násobič (a možná i několik přištích) pošli k uživateli, tam už jen časomíru rozběhni javascriptem.
DJ_Ironic
Profil *
Keeehi, máš z vlké části pravdu. Pláuji projekt, kde poběží čas "virtuálního světa", který budu moct nejlépe na jiné stránce ovládat. Bude to pokus o spolupráci s komunitou, která bude moct v tomto herní světe dělat volby a hlasování. Čas chci mít upravittelný proto, že když např. odjedu a nebo nebudu stíhat, virtuální život se nepohne a nedodje k žádné události. Jinak juriad, linuxové VPS taky není problém. Opravdu tedy potřebuji, aby všichni viděli stejný čas. Vím že teď zním jako začátečník, což i jsem. Ale byl bych rád, kdyby na to někdo přišel, aby mi pomohl nějak udělat ten kód. Uvedení creditu pod práci je samozřejmost.

Díky moc.


PS: co se týče přesnosti, stačí mi to na minuty, maximálně 10 minut. A ovládat bych to chtěl nějak externě, nejlépe na jiné stránce na webu něco typu web.tld/admin
midlan
Profil
DJ_Ironic:
byl bych rád, kdyby na to někdo přišel
Však jsem ti návod napsal, teď to naimplementuj nebo si na to někoho najmi.
DJ_Ironic
Profil *
Asi budu must na to někoho najmout nebo na to nějak přijít. Protožýe jsme opravdu levej. Horší je, že za to fakt nemůžu vyhodit velký prachy. No, jdu se na to mrknout.
DJ_Ironic
Profil *
midlan: Mohl bys mi to nějak lépe vysvětlit ? V tvém návodu se absolutně nevyznám.
juriad
Profil
DJ_Ironic:
midlanův návrh je skoro stejný jako můj, jen on chce vypočítávat aktuální čas od začátku přes všechny změny rychlosti po cestě. Já na druhou stranu navrhuji výpočet aktuálního času jen od poslední změny rychlosti. Můj způsob je jednodušší a rychlejší.

Chceš-li uchovávat historii aktuálních časů v databázi, můžeš použít tyto dotazy. Tabulka bude mít tři sloupce datového typu DECIMAL.

Na začátku vytvoříš první záznam (aby bylo od čeho počítat):
INSERT INTO historie_casu (realny_cas, aktualni_cas, rychlost)
VALUES (NOW(), NOW(), 1)

Pro získání aktuálního času:
SELECT aktualni_cas + (NOW() - realny_cas) * rychlost
FROM historie_casu ORDER BY realny_cas DESC LIMIT 1

Pro získání libovolného aktuálního času v minulosti (ale po začátku historie):
SELECT aktualni_cas + ($realny_historicky - realny_cas) * rychlost
FROM historie_casu WHERE realny_cas < $realny_historicky ORDER BY realny_cas DESC LIMIT 1

Při změně času provedeš:
INSERT INTO historie_casu (realny_cas, aktualni_cas, rychlost)
SELECT NOW(), aktualni_cas + (NOW() - realny_cas) * rychlost, $nova_rychlost
FROM historie_casu ORDER BY realny_cas DESC LIMIT 1
DJ_Ironic
Profil *
A na to mám nějak použít MySQL ? Moc děkuji za tvou ochotu juriad, a věřím že už tu ze mě všichni pácháte sebevraždu, ale nevím kam co patří. Jsem hold správné, internetů neznalé moravské poleno. Moc díky
juriad
Profil
Ano, toto jsou dotazy do MySQL. Pokud se ti to nelíbí, můžeš to ukládat třeba i do texťáku. V nejjednodušší podobě jako tři řádky na kterých budou po jednom čísla: reálný čas, aktuální čas a rychlost.

Reálný čas se dozvíš v PHP funkcí time. Soubor načteš funcí file. Pro získání aktuálního času ti stačí odečíst, vynásobit a přičíst.

Při změně rychlosti soubor přepíšeš novými údaji. Sice tak nebudeš mít dostupnou historii změn, ale je to jednodušší. Také to asi nebude atomické, což může způsobit jednorázovou chybu. (Nedojde k tomu, pokud nebudeš mít tisíce uživatelů.)
DJ_Ironic
Profil *
Tisíce uživatelů určitě ne. Akorát se očividně musím o PHP dost naučit než vaše rady pochopím a zvládnu to postavit. Jsem opravdu ještě začátečník a na php jsem skoro ani nesáhl, začal jsem v HTML. No, možná z toho časem něco postavím, protože někoho si na to najmout opravdu nemůžu. Jsem pořád jen 15-ti letý student gymplu :) Ale i tak více než díky za vaše rady.
Keeehi
Profil
Pro začátky s PHP tu zdejší diskutéři připravili web. Péhápko: Učebnice PHP
DJ_Ironic
Profil *
Do konce týdne to musím mít => má přes noc co studovat. Díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: