Autor Zpráva
rudla
Profil
Ahoj,
potřeboval bych poradit. Chci udělat nějakej automat, co přepíše dokument v určitý čas. Jde to nějak? Díky za rady ;)
Spectator
Profil
zkus využít crone
okolojdouci
Profil *
Jestli máš na hostingu CRON, můžeš si do něj přidávat něco, co se bude opakovaně provádět.
Jestli ne, můžeš daný kus kódu spustit přímo z index.php, s tím že hlídáš aktuální čas a to, jestli ta věc v daném intervalu už neproběhla.
rudla
Profil
okolojdouci:
Jak to tady vidím, můj hosting CRON nepodporuje. Jak to mám teda udělat?
okolojdouci
Profil *
rudla:
Spuštění v daný čas nedosáhneš. Ale jestli jde o to, aby se něco provedlo jednou za den (za hodinu apod), tak si někam zapisuj, kdy to naposled proběhlo a při každém otevření index.php ověř, kolik času uplynulo od posledního provedení. Když je to víc než požadovaný interval, proveď akci a ulož čas. Do souboru nebo do databáze.
Je to hodně nepřesné, ale jsou situace, kdy to nevadí. Záleží, na co to potřebuješ.
okolojdouci
Profil *
Nebo když chceš něco provést např. kolem 15. hodiny.
1. Už bylo 15 hodin?
2. Už bylo dneska spuštěno?
3. Jestli ne, spustím a zaznamenám, že jsem to už dneska provedl.

Spolehlivost roste s návštěvností. Je rozdíl, jestli máš denně deset návštěv nebo tisíc.
rudla
Profil
okolojdouci:
Záleží, na co to potřebuješ.
Potřebuju, aby se vždy v 00:00 hodin přepsal celý obsah souboru pocet-den.txt na 0. Celý obsah bude jen 0.
rudla
Profil
okolojdouci:
Je rozdíl, jestli máš denně deset návštěv nebo tisíc.
Takže chápeš, co myslím :)
okolojdouci
Profil *
rudla:
vždy v 00:00 hodin

Takže jedině cron. Případně cron někde na jiném hostingu (viděl jsem ho i na něčem free), který si v daný čas řekne o nějakou stránku u tebe a ta spustí akci.
okolojdouci
Profil *
rudla:
Potřebuju, aby se vždy v 00:00 hodin přepsal celý obsah souboru

Nejsem si jist, jestli víš co potřebuješ, ale dovolím si spekulaci.

Jestli jde o údaj, který se zobrazuje návštěvníkům, tak platí, že:
"Potřebuju, aby se prvním otevřením stránky po půlnoci provedla akce."

Jestli jde o údaj, který se zobrazuje adminovi, tak platí totéž.
Jestli ten soubor zpřístupňuješ nějakému scriptu, dá se zařídit přesměrování. Ten soubor bude existovat jen virtuálně, ve skutečnosti to bude php skript, který udělá to, co píšu nahoře a pak se zatváří, že je to soubor pocet-den.txt s obsahem 0.

Ale možná existuje nějaká varianta, na kterou jsem zapomněl.
rudla
Profil
okolojdouci:
Potřebuju, aby se prvním otevřením stránky po půlnoci provedla akce
Přesně tak to je. Jakmile odbije půlnoc, soubor se přepíše a po půlnoci se se souborem může dál normálně pracovat, zbytek vím, ale problém je u toho přepisu na nulu :)
okolojdouci
Profil *
rudla:
.. aby se prvním otevřením stránky po půlnoci provedla akce
Přesně tak to je. Jakmile odbije půlnoc, soubor se přepíše


To je protimluv. Jestliže nemáš cron a nechceš/nemůžeš použít to volání z cronu z cizího webu, tak ten soubor prostě v přesně určený čas nezměníš.

Rozlišuj zapisuje se do souboru a někdo/něco chce znáš obsah souboru.
To první dokáže jen cron, já ti tady naznačuju, že jestli máš jasno, jakým způsobem si co bude vytahovat obsah souboru, můžeš na to reagovat a ten soubor případně přepsat.

problém je u toho přepisu na nulu
http://cz.php.net/manual/en/function.fwrite.php
rudla
Profil
okolojdouci:
fwrite znám, hledal jsem sebevíc, ale nenašel jsem, jak přepsat celý soubor na určitou hodnotu, v tomto případě "0".
Louka
Profil
Můj názor:
Jestli chceš, aby se to udělalo o půlnoci = chceš aby první návštěvník další den měl v tom souboru "0".

Ukládej si někde, jestli ten den už někdo na stránkách byl a při příchodu na stránku to ověř - pokud ti vyjde, že ten přístup je první ten den, tak změň tu hodnotu souboru na "0" a dál pracuj. Efekt bude ten samý, jako kdyby to dělal cron v 00:00...

problém je u toho přepisu na nulu
Asi bych to udělal takhle:
<?php 
$soubor = fopen("soubor.txt","w");
fwrite($soubor,"0");
fclose($soubor);
?>
Keeehi
Profil
rudla:
Dá se to udělat, jak ti tady popisují okolojdouci a Louka, jenže ty to nějak pořád nechápeš. Zkus se nad tím pořádně zamyslet. Ty nepotřebuješ přesně v 00:00 ten soubor vymazat! A to je to hlavní. Tobě to stačí udělat až s příchodem prvního návštěvníka.

Toto dáš na začátek scriptu, který potom pracuje s tím soubor.txt (pokud to je počítadlo, tak na začátek toho scriptu, který se o to počítadlo stará)
if(file_get_contents("datum.txt")!=date("Y-m-d")){
  file_put_contents("soubor.txt",0);
  file_put_contents("datum.txt",date("Y-m-d"));
}


Pokud to přesto nechápeš, tak můžeš využít služeb http://www.monitoring-serveru.cz/ - čímž si nasimuluješ cron.
rudla
Profil
Louka, Keeehi
Díky oběma, Keeehi, otestuju ten monitoring-serveru.cz a otestuju oba kódy, díky, díky ;)
rudla
Profil
Keeehi:
Místo toho Y-m-d mám zřejmě dát datum, že?
Louka
Profil
rudla:
Ne, to právě ten datum zjistí samo. date("") je funkce, která umí vracet formátované datum.
Louka
Profil
if(file_get_contents("datum.txt")!=date("Y-m-d")){ // = pokud obsah souboru datum.txt není aktuální datum (=ještě nebyla první návštěva)
  file_put_contents("soubor.txt",0); // dej do souboru soubor.txt nulu (tj to co chceš udělat)
  file_put_contents("datum.txt",date("Y-m-d")); // a nastav do datum.txt aktuální datum -> při druhé návštěvě už neprojde podmínka
  // a tím pádem se znovu nebude nastavovat ta nula do soubor.txt
}
rudla
Profil
Louka:
A to to datum v datum.txt změní samo v určitý čas?
okolojdouci
Profil *
rudla:

Jestliže nemáš cron a nechceš/nemůžeš použít to volání z cronu z cizího webu, tak ten soubor prostě v přesně určený čas nezměníš.

Kterému slovu konkrétně nerozumíš?
rudla
Profil
okolojdouci:
Hele, zřejmě to funguje, takže ďýki :)

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: