Problem:
Ich nutze für zwei meiner Seiten viele CronJobs. Jetzt hat mein Hoster aber die IP-Ranges von CronJob.de gesperrt. Beim Hoster selbst kann ich mit meinem Tarif keine CronJobs erstellen. Deshalb muss ich jetzt irgendeinen Ersatz für die CronJobs suchen.
Meine Idee:
Die Dateien werden statt mit echten CronJobs einfach mit PHP aufgerufen. Man erstellt eine MySQL-Tabelle:
- datei (URL; z.B. "http://www.example.org/script.php"
- last (Timestamp des letzten Aufrufs)
- intervall (Zeitraum zwischen zwei Aufrufen; z.B. "3600" für eine Stunde)
Man schreibt ein PHP-Script:
CODE <?php
$sql1 = "SELECT datei FROM cronjobs WHERE (zeit+intervall) < AKTUELLER_TIMESTAMP ORDER BY RAND() LIMIT 0, 1";
$sql2 = mysql_query($sql1);
if (mysql_num_rows($sql2) == 0) { exit; }
$sql3 = mysql_fetch_assoc($sql2);
file_get_contents($sql3['datei']);
$sql4 = "UPDATE cronjobs SET last = AKTUELLER_TIMESTAMP WHERE datei = '".$sql3['datei']."'";
$sql5 = mysql_query($sql4);
?>
Dieses Script bindet man per include() in allen Dateien der Webseite ein. So hat man auch CronJobs, wenn man genügend Besucher auf der Seite hat.
Was haltet ihr von dieser Idee? Kann man sie noch verbessern? Habt ihr andere Vorschläge?
Ich nutze für zwei meiner Seiten viele CronJobs. Jetzt hat mein Hoster aber die IP-Ranges von CronJob.de gesperrt. Beim Hoster selbst kann ich mit meinem Tarif keine CronJobs erstellen. Deshalb muss ich jetzt irgendeinen Ersatz für die CronJobs suchen.
Meine Idee:
Die Dateien werden statt mit echten CronJobs einfach mit PHP aufgerufen. Man erstellt eine MySQL-Tabelle:
- datei (URL; z.B. "http://www.example.org/script.php"
- last (Timestamp des letzten Aufrufs)
- intervall (Zeitraum zwischen zwei Aufrufen; z.B. "3600" für eine Stunde)
Man schreibt ein PHP-Script:
CODE <?php
$sql1 = "SELECT datei FROM cronjobs WHERE (zeit+intervall) < AKTUELLER_TIMESTAMP ORDER BY RAND() LIMIT 0, 1";
$sql2 = mysql_query($sql1);
if (mysql_num_rows($sql2) == 0) { exit; }
$sql3 = mysql_fetch_assoc($sql2);
file_get_contents($sql3['datei']);
$sql4 = "UPDATE cronjobs SET last = AKTUELLER_TIMESTAMP WHERE datei = '".$sql3['datei']."'";
$sql5 = mysql_query($sql4);
?>
Dieses Script bindet man per include() in allen Dateien der Webseite ein. So hat man auch CronJobs, wenn man genügend Besucher auf der Seite hat.
Was haltet ihr von dieser Idee? Kann man sie noch verbessern? Habt ihr andere Vorschläge?