• Ik heb een semi cron job. Deze moet verschillende php bestanden laden uit de cron folder. Dit zou moeten op deze wijze:


    Code
    //Run the cronjobs for the scripts	//Load correct cron name	$cron2				= mysql_query("SELECT * FROM `cron`");	$crondata				= mysql_fetch_object($cron2); {	 	$RunLog = 'includes/crons/'.$crondata->name.'.log'; //make sure you have this file downloaded too			if (file_exists($RunLog)) {     $lastRun = file_get_contents($RunLog); 
        if (time() - $lastRun >= $crondata->seconds) { //This will check last time file ran.			//Select all cronjobs from the database    $select = mysql_query("SELECT name FROM `cron` ORDER BY  (`name`) DESC LIMIT 0,999");	while($list = mysql_fetch_assoc($select))    {
    	$cron= file_get_contents('http://'.$_SERVER['SERVER_NAME'].'/includes/crons/'.$list[name].'.php?password='.$cron_password.'');  // here you put the link for your file or the php code     file_put_contents($RunLog, time()); 		}				    } 	} }


    Een voorbeeld van een php script is:


    Code
    include("../../includes/settings.php");
    mysql_connect(database_server, database_user, database_pass) or die(mysql_error());mysql_select_db(database_name) or die(mysql_error());
    if($_GET['password']!="$cron_password"){die("");}else{	
    //Enter updates to run with the cronjob
    //Check if user is killed and put all possesions to the auction	$doden1 = mysql_query("SELECT * FROM `users` WHERE `vermoord`>'0'");	$numdood = mysql_num_rows($doden1);	$y = (date("Y"));	$m = (date("m"));	$d = (date("d"));	$nextd = $d+1;	if($nextd < 10){$nextd = "0$nextd";}	$changeveilingshow = "$nextd-$m-$y / 00:00";	$changeveiling = "$y-$m-$nextd 00:00:00";	if($numdood > 0){	while($doden = mysql_fetch_object($doden1)){	while($doden = mysql_fetch_object($doden1)){	mysql_query("UPDATE `ziekenhuis` SET `showtot`='" . $changeveilingshow . "', `tot`='" . $changeveiling . "', `eigenaar`='', `laatstebod`='0', `laatstebieder`='' WHERE `eigenaar`='" . $doden->login . "'");	mysql_query("UPDATE `users` SET `bezittingen`='0' where `login` = '$doden->login'");		}	}	//Auction	$ziekenhuis1 = mysql_query("SELECT * FROM `ziekenhuis` WHERE `eigenaar`=''");	while($ziekenhuis = mysql_fetch_object($ziekenhuis1)){	$fakedatum = (date("YmdHis"));	$overheen = $ziekenhuis->tot;	$overheen = str_replace(":", "",$overheen);	$overheen = str_replace("-", "",$overheen);	$overheen = str_replace(" ", "",$overheen);		if($fakedatum > $overheen){	if($ziekenhuis->laatstebieder != ""){	mysql_query("UPDATE `ziekenhuis` SET `showtot`='00-00-0000 / 00:00', `tot`='0000-00-00 00:00:00', `eigenaar`='" . $ziekenhuis->laatstebieder . "' WHERE `stad`='" . $ziekenhuis->stad . "'");	}else{mysql_query("UPDATE `ziekenhuis` SET `showtot`='" . $changeveilingshow . "', `tot`='" . $changeveiling . "' WHERE `stad`='" . $ziekenhuis->stad . "'");}}}		}}


    Nou is het probleem dat mijn cron scripts niet worden geladen en het lukt me maar niet te vinden waardoor dit komt. Het password wordt goed geladen en de naam van het cron bestand staat goed in de database (cron script wordt geladen in de index.php). Iemand enig idee hoe ik dit kan oplossen? Of een alternative manier om mijn cron scripts te laden zonder cronjobs op mn server in te stellen?

  • Probeer dit eens?


    Hint: probeer netjes te programmeren en werk met fout afhandeling.
    Nog een hint: Cron jobs moet je niet willen kunnen openen via de browser. Als iemand je cronjob wachtwoord weet dan ben je screwed ^^. Je kan beter, zoals wimmpie al aangaf, include gebruiken.

  • Nog een aantal "Hints" ;) :


    - Bestanden die de "normale" gebruiker niet hoort te bereiken (Zoals cronjobs) horen niet in de public_html.
    - Gebruik nou eens Foutafhandeling. Heb daar een blog over geschreven. (Zie mijn account)
    - Gebruik MySQLi of PDO.. MySQL gaat er zo uit en dan kan jij ál je scripts gaan zitten aanpassen.
    - Gebruik geen backticks (`) in queries
    - Je kan volgens mij beter include gebruiken. Is dat niet gewoon makkelijker? Ik snap jouw redenering niet helemaal.

  • Allemaal bedankt voor de antwoorden.


    Stel dat ik wel een include ga gebruiken. Hoe zou ik dan mijn verschillende cron bestanden het makkelijkste kunnen includen zodat deze ook op de juiste tijd runnen?


    Ik wil al mijn crime scripts apart als modules uploaden en per script dus ook de crons scheiden. Ik heb nu ongeveer 20 verschillende cron bestanden wat is hiervoor het handigste om te doen?

  • Over de meeste punten ben ik het eens, maar hoezo geen backticks in queries?


    Ik heb het al vaker gezegd:


    Citaat


    Backticks( `) zijn af te raden ;) Backticks zijn bedoelt om woorden te kunnen gebruiken die eigenlijk gereserveerd zijn. (Dat zijn dus woorden als "order" en "count") Als jij allemaal van dat soort in je database gaat gebruiken raak je snel het overzicht kwijt en zeker als je een grote database hebt. Daarnaast worden backticks niet altijd ondersteunt en is het dus mogelijk dat je een keer al je backticks moet verwijderen en wellicht je hele database aan moet passen. Dus beter in één keer goed doen en geen gereserveerde woorden of backicks gebruiken! :)

  • @Simone


    Je hebt de crons nu opgeslagen in de database toch? Je kan dan een veld toevoegen van laatst uitgevoerd (Datum). Dan kan je in je pagina controleren of het script op die datum al is uitgevoerd en zoniet, kijken of het al tijd is (of is geweest). In de database update je dan het laatst uitgevoerd.


    Maar waarom eigenlijk geen cronjobs gebruiken? Want als een gebruiker 25 bestanden moet gaan uitvoeren, (Wat sowieso onwenselijk is..) is dat erg zwaar.

  • Victor Niet veel hosts ondersteunen cronjobs ivm veiligheid ofzo, dus dat zal wel de reden zijn...


    Verder worden m.b.t. discussie backticks wel of niet... Backticks alleen ondersteund door MySQL en MySQLI, anders moet je gewoon een single quote gebruiken :)
    Niet ik het veel gebruik omdat ik mn queries veilig opbouw met een querybuilder...

  • Op mn hosting mag ik inderdaad niet zoveel crons uitvoeren, en om alle cron scripts per game script te kunnen scheiden wil ik deze los opgeroepen hebben.


    Zou ipv een check in de datase een include in het index php script een oplossing zijn dan? En hoe kan ik hierbij controleren op bv. iedere 5, 15, 60, 3600 minuten vanuit de database?

  • Op mn hosting mag ik inderdaad niet zoveel crons uitvoeren, en om alle cron scripts per game script te kunnen scheiden wil ik deze los opgeroepen hebben.


    Zou ipv een check in de datase een include in het index php script een oplossing zijn dan? En hoe kan ik hierbij controleren op bv. iedere 5, 15, 60, 3600 minuten vanuit de database?


    Hallo,


    Daar zijn dus cronjobs voor. Als je hosting dit niet bied moet je elders naartoe.
    Of je moet een andere partij vinden die een script van jou aanroept van buitenaf. Wat vaak ook geld kost, dus kan je beter naar een andere hosting gaan.


    Mvg,
    Tim

  • Ok, maar nu heb ik mn hosting al weer voor een jaar vooruit betaald dus ik zal hier toch even moeten blijven. Hoe kan ik dan mijn cronjobs faken in php zelf? Heb namelijk gezien dat sommige crime games ook een db table crons hebben met hierin dag, uur, week, etc. Op een dergelijke wijze zou het toch ook moeten kunnen? Zou iemand mij hier een voorbeeld oid voor kunnen geven?

  • Citaat

    Je hebt de crons nu opgeslagen in de database toch? Je kan dan een veld toevoegen van laatst uitgevoerd (Datum). Dan kan je in je pagina controleren of het script op die datum al is uitgevoerd en zoniet, kijken of het al tijd is (of is geweest). In de database update je dan het laatst uitgevoerd.


    Maar zoals ik al zei is dit erg onwenselijk. Je geeft onnodig veel laadwerk aan de user.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!