Autor | Zpráva | ||
---|---|---|---|
pavelox Profil * |
#1 · Zasláno: 2. 9. 2009, 19:54:36
zdravím,
mám naprogramovat hlídač. Zadám poznámku a chci aby mě program za 5 hodin např. upozornil na tu poznámku nějakou zprávou např. Můj dotaz směřuje na použití funkce s časem. Mám strach, že když si uživatel změní v PC čas ... nebude tento program fungovat správně ... Jakou funkci mám použít, aby na to čas lokální v pc neměl vliv? dík za radu |
||
Werewolf Profil |
#2 · Zasláno: 2. 9. 2009, 20:08:14 · Upravil/a: Werewolf
V PHP nic takového nenapíšeš. Když už, tak v JS - kontrolovat to cyklem, změnění času v PC je celkem problém.
Být Tebou, napsal bych tento program (pokud bys to psal v PHP, byl by to skript) například v C. nenapíšeš - bude to prasácké. Stránka se musí sama pravidelně aktualizovat. Edit: drasha: Vždyť už jsem to opravil... Každý se někdy splete. SwimX: CRON je taky řešením... „ukaž“ Má pravdu. Mimochodem - neuraž se - jsi hloupý nebo jsem chytrý? |
||
drasha Profil |
#3 · Zasláno: 2. 9. 2009, 20:08:27
Time() - pokud nezměníš čas na serveru..
|
||
drasha Profil |
#4 · Zasláno: 2. 9. 2009, 20:12:59
„V PHP nic takového nenapíšeš. Když už, tak v JS - kontrolovat to cyklem, změnění času v PC na to vliv nemá. “
Ehm, v PHP je to hračka. JS pracuje na straně uživatele -> využívá jeho čas. |
||
SwimX Profil |
#5 · Zasláno: 2. 9. 2009, 20:14:33 · Upravil/a: SwimX
pavelox:
To bude složtější než zřejmě čekáš. Na servru by to chtělo spustit démona, třeba CRONa, který by řekněme tedy každou hodinu spouštěl skript: hlidac.php V něm by bylo: načtení poznámek z DB které mají čas výstrahy menší než 5 hodin od aktuálního času (time()) a odeslání emailu např. drasha: „Time() - pokud nezměníš čas na serveru..“ supr zpráva, škoda že tazateli moc nepomůže. „v PHP je to hračka“ ukaž |
||
pavelox Profil * |
#6 · Zasláno: 2. 9. 2009, 20:14:36
Tak to lze napsat v PHP? A funkce mktime nelze piužít?
|
||
pavelox Profil * |
#7 · Zasláno: 2. 9. 2009, 20:15:30
Teď v tom mám bordel . jde mi o to udělat odpočet do nějakého úkonu .. ale nechci aby to mohl ovlivnit uživatel tím, že posune čas ...
|
||
SwimX Profil |
#8 · Zasláno: 2. 9. 2009, 20:16:21
pavelox:
PHP -> se provádí na servru, kdo bude ten požadavek na servr odesílat? Nastuduj začátky nepředhazuj nám tu funkce. |
||
SwimX Profil |
#9 · Zasláno: 2. 9. 2009, 20:19:39 · Upravil/a: SwimX
Werewolf:
neupravuj svů příspěvek, málem jsem si toho ani nevšiml :) > „ukaž“ > Má pravdu. nerozumím? // to byla reakce na mě, nebo na drasha? Kdo z nás má být hloupý? |
||
Werewolf Profil |
#10 · Zasláno: 2. 9. 2009, 20:27:40 · Upravil/a: Werewolf
SwimX:
Ty. A omlouvám se za tu úpravu. Chtěl jsem tím říct, že on má pravdu, že v PHP je to snadné napsat. |
||
pavelox Profil * |
#11 · Zasláno: 2. 9. 2009, 20:30:47
SwinX : Chtěl jsem poradit .. nechápu co se mi snažíš říct :( provádí se na serveru, ale na localhostu přece mohu čas změnit )
|
||
SwimX Profil |
#12 · Zasláno: 2. 9. 2009, 20:39:12
pavelox:
ano, ale předpokládám, že ostatním lidem nebudeš posílat skript, aby si ho pustili na localhostu, to by si ten script mohli rovnou upravit ne? nahraješ ho někam na hosting, a tam čas těžko změníš. Werewolf: chci něco vidět. Nevěřím ti |
||
pavelox Profil * |
#13 · Zasláno: 2. 9. 2009, 20:40:16
Díky za odpovědi
|
||
Werewolf Profil |
#14 · Zasláno: 2. 9. 2009, 20:43:11 · Upravil/a: Werewolf
pavelox:
„odpočet do nějakého úkonu“ Tak v tom případě Tě asi nikdo nepochopil. Za pět hodin... Pravda. Mám řešení, pokud chceš opravdu odpočet. Někam si ulož datum a čas, kdy se má akce provést a při zobrazení stránky jenom zjisti zbývající čas v sekundách (odčítání času konce od toho aktuálního), použíj nějaký JavaScript pro odpočítávání se vstupem v sekundách, kterých je na webu plno a dej mu na vstup ty sekundy. Poté, pokud umíš JS a pokud to počítadlo, které jsi našel neumí, po dosažení 0 sekund aktualizuj stránku a vyhoď alert, který řekně něco jako "Čas vstávat!", prostě tu upomínku. Pokud je to moc složité, tak tady je hotové řešení: if($upominka > time()) { // do proměnné upominka vlož např. z databáze ten čas $remain = $upominka - time(); if($remain <= 0) { echo('<h1>Čas vstávat!</h1><script>alert('Upomínka! Vstávat!');</script>'); mail("ten_komu@to-chces.poslat", "Vstávat...", "Blabla", "From: tvujmail@domena.tld"); } else { echo('<b>Zbývající doba:</b> <i id="remaining"></i>'); ?> <script> d1=new Date(); var remaining=document.getElementById('remaining'); function countdown(){ d2=new Date(); s = <?php echo($remain); ?> - Math.round((d2.getTime() - d1.getTime()) / 1000); m=0; h=0; if(s < 0){ remaining.innerHTML = "- - - - -"; location.reload(); } else { if(s > 59){ m = Math.floor(s / 60); s = s-m * 60; } if(m > 59){ h = Math.floor(m / 60); m = m-h * 60; } if(s < 10){ s = '0'+ s; } if(m < 10){ m = '0'+ m; } remaining.innerHTML=" "+h+":"+m+":"+s+''; document.title='Zbývající doba: '+h+':'+m+':'+s+' !'; window.setTimeout("countdown();",999); } } countdown(); </script> <?php } ?> Ta teorie je nakonec asi jen pro zábavu. Stejně nejspíš najdeš svoje řešení, které Ti víc vyhovuje. // Tak ne. Edit: SwimX: Klidně se dívej... |
||
pavelox Profil * |
#15 · Zasláno: 2. 9. 2009, 20:45:35
Díky .. to by mohlo být ono
|
||
drasha Profil |
#16 · Zasláno: 2. 9. 2009, 20:45:49 · Upravil/a: drasha
SwimX
Říká ti něco "reálný čas", "rekurzivní funkce", nebo třeba "sleep()" ?:) Já už tu fci mám, na pár řádků :) |
||
SwimX Profil |
#17 · Zasláno: 2. 9. 2009, 20:49:07
Werewolf:
tvůj skript neřeší požadouvanou věc: za 5 hodin vyhodit hlášku. Pouze kontroluje při zobrazení stránky jestli už uplynul čas nebo ne. Toe opravdu skvělé, dám do kalendáře upomínku narezeniny své tchýně, kalendář neotevřu -> skriipt se neodešle na servr, hláška nikdy nepřijde na anrozeniny zapomenu a co řekne tchýně? a co teprve manželka? Toto není řešení ;) V php toto udělat nejde, leda že by ten skript pouštěl každou chváíli CRON, jak už jsem napsal. U JS je také problém -> musím na té stránce být, jinak mám opět smůlu. |
||
drasha Profil |
#18 · Zasláno: 2. 9. 2009, 20:49:17 · Upravil/a: drasha
Werewolf
Zbytečné. Pomocí PHP a JS to jde přes JSkový refresh stránky za dobu, kterou si tam zadá. Ovšem, co když má JS vypnutý?:) Nebo stránku zavře a otevře znovu.. |
||
drasha Profil |
#19 · Zasláno: 2. 9. 2009, 20:51:21
„V php toto udělat nejde, leda že by ten skript pouštěl každou chváíli CRON, jak už jsem napsal. “
Uč se PHP :) Protože to jde a nejedním způsobem. |
||
SwimX Profil |
#20 · Zasláno: 2. 9. 2009, 20:59:52
drasha:
„Uč se PHP :) Protože to jde a nejedním způsobem.“ neboj, učím :) pokud to opravdu jde tak snadno pak se omlouvám, ale opravdu jsi mě stále nepřesvědčili. Werewolfovo řešení se mi nelíbí. Ukaž mi tedy to tvé. Dám si upomínku, že za měsíc má někdo narozeniny, můžu v klidu odejít ze stránky, atd. a očekávat upozornění, pomocí tvé jednoduché funkce? |
||
drasha Profil |
#21 · Zasláno: 2. 9. 2009, 21:10:41
Když ti během té doby nespadne server :) Ale kusy kódu psát nebudu, spočívá to v tom, že voláš funkci pořád dokola(jednou za sekundu) dokud není ten požadovaný čas. Nebo server uspíš na určitou dobu a pak skript pokračuje. Rozhodně to v PHP jde. Přes cron table je to jistější. Ale jako nejlepší řešení bych si dal upomínku na mobil :)
|
||
pavelox Profil * |
#22 · Zasláno: 2. 9. 2009, 21:23:05
Jenže JAVA SCRIPT si může uživatel vypnout a pak to taky nebude fungovat .. jde to udělat jen v php?
|
||
SwimX Profil |
#23 · Zasláno: 2. 9. 2009, 21:23:42
drasha:
dobrá rekurzi chápu, ale uznej, že běžně máš na servru nastavenou minimální dobu běhu skriptu. Takže to nepude. Když tu stránku zavřu, tak se bude pořád volat? to už teda nevím. Rozhodně měsíc zatěžovat servr a jedna sekunda toe zabiják nemyslíš? ono i těch 5 minut je 5*60 = 300 volání fce. To není zzrovna nejlepší řešení -> tvrdím že nejde. A s tím zavřením stránky myslím si, že se volat přestane ;) |
||
SwimX Profil |
#24 · Zasláno: 2. 9. 2009, 21:29:19
pavelox:
řekni vše co potřebuješ udělat. Co to má být za projekt? lidi si budou zadávat upomínky a ty jim je hlásit? nebo chceš jen odpočítat 5minut a pak poslat mejl? |
||
pavelox Profil * |
#25 · Zasláno: 2. 9. 2009, 21:33:36
SwimX : Chci prostě, aby se uživatel přihlásil do svého profilu např. tam klikne na tlačítko a za 6 hodin např. přibyde na jeho účet určitý počet bodů. To mi stačí. Aby mohl např. to tlačítko obnovit až po určitém čase,.
|
||
SwimX Profil |
#26 · Zasláno: 2. 9. 2009, 21:59:23 · Upravil/a: SwimX
pavelox:
vidíš, to už je něco jiného, na to je naopak CRON zbytečný, protože zároveň chceš, aby byl uživatel aktivní, a ne aby se přihlásil, minimalizoval prohlížeč a sbíral body. Takže při přihlášení uděláš? $_SESSION['prihlaseni'] = time(); a do stránek vložíš: if(strtotime("-6 hours") > $_SESSION['prihlaseni']){ //to znaméná, že už je tam víc než 6 hodin. jen pozor aby se sessiony nevyprazdňovali třeba po 30ti minutách :) } |
||
drasha Profil |
#27 · Zasláno: 2. 9. 2009, 22:49:58 · Upravil/a: drasha
SwimX
dívej, chlapec chtěl vědět funkci na čas, nic jinýho - tj Time() :) Tys říkal, že přes PHP počítání času NEJDE. Já jen řekl, že to jde, ne že je to vhodné :) A řešení jeho problému podle mě, zpočívá v ukládání použití tlačítka Obnovit do databáze :) Takže po každém použití tlačítka obnovit se vepíše do DB čas, kdy bylo použito. A při přihlášení ten čas hodíš do SESSIONS a používání toho tlačítka budeš kontrolovat i interně v tom skriptu na přidávání bodů a to tak, že si znova vytáhneš poslední čas přidání, z DB a zkontroluješ ho. |
||
SwimX Profil |
#28 · Zasláno: 2. 9. 2009, 22:51:57
drasha:
„Tys říkal, že přes PHP to NEJDE. Já jen řekl, že to jde, ne že je to vhodné :)“ ok, špatně sem se vyjádřil. :) |
||
Werewolf Profil |
#29 · Zasláno: 3. 9. 2009, 07:25:36
SwimX:
Pokud sis přečetl [#25], tak z toho pro Tebe plyne, že mé řešení je dostačující. |
||
SwimX Profil |
#30 · Zasláno: 3. 9. 2009, 12:45:33
Werewolf:
ale tys mi tvrdil že jsem hloupý už v příspěvku #2 kde pavelox přesně nenapasl co chce, a to co jsme oba mysleli by tvým způsobem nešlo. |
||
Časová prodleva: 15 let
|
0