Jéé, koukám, jak dlouho je to tu mrtvý, a jak si tu všichni přidávají své bash skripty a tak budu originální a přidám svoji jednoduchou php funkci. (jednu z mála za kterou se úplně nestydím)
funkce je simulací cronu, na serverech, které cron nepodporují nebo nepovolují(můžete aplikovat například pokud máte doménu na těch free serverech typu ic-cz apod.)
nezastřelte mě za odsazování, takový věci většinou nevedu (ale už se lepším!)
k použití, data jsou uložena v tabulce "cron", přikládám exportovaný sql soubor mé tabulky.
path je cesta k souboru, který se má spustit, lused je datum posledniho spusteni (pri prvnim sypani dat do tabulky nemusite zadavat zadnou hodnotu), circle je pocet sekund, po kolika se ma akce opakovat, again má tři různé možnosti "N", "Y", "S-XX" (kde XX je nějaké číslo). Značí to, jestli se má provést opakování více těch příkazů ve chvíli, kdy bylo zjištěno, že doba od posledního spuštění je minimálně dvojnásobná, než hodnota circle. Jestli je nastavena na N, pak se příkaz provede maximálně jednou, jestli je nastavena na Y, pak se provde tolikrát, kolikrát uplynula perioda circle, a jestli je nastavena na S-XX, pak se provede vicekrat maximalne do cisla XX
doporucuji tuhle funkci hodit na zacatek kazdeho souboru, aby se spustila pri kazdem pristupu na stranku - pri trochu vetsim trafficu to ma sanci simulovat cron docela dobre.
asi ten navod budu prepisovat, trochu se mi pripozdiva (dve v noci) a minulou noc jsem nespal, takze doufam, ze jste to pochopili.
P.S.: Stastne a vesele..
function cron(){
$cr=mysql_query("SELECT * FROM cron");
$ord=Array("time"=>Array(),"path"=>Array());
while ($cron=mysql_fetch_array($cr)){
$cron["lused"]=strtotime($cron["lused"]);
$now=time()-$cron["lused"];
if ($now>=$cron["circle"]&&$cron["circle"]!=0){
if ($cron["again"]=="Y"){
for ($i=1;$i<=($now/$cron["circle"]);$i++) {
$ord["time"][]=$cron["lused"]+($cron["circle"]*$i);
$ord["path"][]=$cron["path"];}}
elseif (strpos($cron["again"],"S")!==false){
$much=explode("-",$cron["again"]);
if ($much[1]>($now/$cron["circle"])) $muc=($now/$cron["circle"]);
else $muc=$much[1];
for ($i=1;$i<=$muc;$i++){
$ord["time"][]=$cron["lused"]+($cron["circle"]*$i);
$ord["path"][]=$cron["path"];}}
else{
$ord["time"][]=$cron["lused"]+($cron["circle"]);
$ord["path"][]=$cron["path"];}}}
array_multisort($ord["time"],$ord["path"]);
foreach($ord["path"] as $path){include($path);}
reset($ord);
array_unique($ord["path"]);
foreach($ord["path"] as $path){
mysql_query("UPDATE cron SET lused=NOW() WHERE path='".mysql_real_escape_string($path)."'");}}
CREATE TABLE IF NOT EXISTS `cron` (
`path` text NOT NULL,
`lused` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`circle` int(10) NOT NULL,
`again` varchar(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `cron`
--
INSERT INTO `cron` (`path`, `lused`, `circle`, `again`) VALUES
('cron/unban.php', '2011-12-13 02:59:28', 86400, 'N'),
('cron/unact.php', '2011-12-13 03:10:04', 10, 'N'),
('cron/backup.php', '2011-12-13 02:59:28', 86400, 'N');