• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

PHP Timer oder so ähnlich?

newmacuser24

Antonowka
Registriert
27.12.05
Beiträge
355
Hallo,

In einer Tabelle meiner MySQL-Datenbank befindet sich eine Spalte, die mit DateTime formatiert ist. Jetzt möchte ich, dass das Script automatisch eine von mir festgelegte Prozedur ausführt (zum Beispiel eine email versendet), sobald irgendein Datums/Zeit Eintrag älter ist als das aktuelle Datum/die aktuelle Zeit.

Löst man das über einen Timer, der alle paar Sekunden die Datenbank überprüft? Stelle ich mir ein bisschen unwirtschaftlich vor. Vermutlich gibt es da eine handlichere Lösung.

Vielen Dank schon mal im Voraus!
 
Ja, das wäre auch ein bisschen unwirtschaftlich. Klingt nach einer Geschichte, die nach nem Cronjob schreit. Handelt es sich denn um einen lokalen MySQL-Server auf deinem Rechner oder einen richtigen Server?
 
Cronjob - auf jeden Fall.

Du musst dann eben nur aufpassen, dass auch PHP-CLI (Comand Line Interface) installert resp. konfiguriert ist, damit PHP-Scripte auch in der Shell aufgerufen werden können.

Außerdem: wenn du dein PHP-Script OHNE shebang schreibst, musst du beim cronjob auch den interpreter angeben - z.B. so:
5 * * * * php /home/www/projekt/tools/mein_db_email_script.php

wenn du aber in der Datei mein_db_email_script.php als erstes die PHP-shebang angibst, also beispielsweise:
#!/usr/bin/php -q
<?php
$db_user = "mydbuser";



dann kannst du im cronjob (vorrausgesetzt die Datei hat ausführungsrechte: chmod +x mein_db_email_script.php) ganz einfach das script nur so angeben:
5 * * * * /home/www/projekt/tools/mein_db_email_script.php

~

Es hat natürlich zum einen mit der eigenen Struktur und zum anderen mit der Größe des Projektes zu tun. Ich bevorzuge die Variante mit der PHP-shebang - so habe ich ein Verzeichnis mit CLI-Tools und ein Verzeichnis für die Web-Anwendung und laufe nicht Gefahr das eine mit dem anderen zu verwechseln und dann eventuell mich zu wundern warum etwas nicht läuft. Wichtig ist dann eben auch, dass die CLI-Scripte außerhalb des documentroot liegen, damit sie nicht per webbrowser aufrufbar sind …
 
Danke für die Antworten! Jetzt bin ich erstmal ein bisschen verwirrt ;-) Ein paar mal noch durchlesen, dann kommt hoffentlich die Erleuchtung. Aber irgendwie hab ich so ein komisches Gefühl, dass das nicht gehen wird, da ich keinen eigenen Server besitzte, sonder lediglich Web-Space (mit PHP, MySQL,etc...) bei meinem Service-Provider....
 
Füttere doch mal dessen Support-Bereich mit dem Suchbegriff "Cronjob". Ansonsten könnte eventuell http://www.cronjob.de/ von Interesse für dich sein, aber um dir besser helfen zu können, wäre es sinnvoll, wenn du kurz umreissen könntest, was du vorhast.
 
Naja, im Grunde handelt es sich um so eine Art Erinnerungsfunktion. Man stellt auf der Webseite, nachdem man sich eingeloggt hat, einen Termin (Datum/Uhrzeit) ein und dann wird dementsprechend eine Aktion ausgeführt, sobald der festgelegte Zeitpunkt eingetroffen ist. Beispielsweise könnte eine Email versendet werden...
 
Du möchtest also einen Dienst anbieten, der ganz grundlegend und wesentlich auf so einer Funktion basiert? Dann solltest du mal mit deinem Hoster sprechen bzw. eventuell den Hoster wechseln, denn da wirst du ohne Crontab-Zugriff kaum glücklich, fürchte ich.
 
Da hätte ich noch eine Frage zur Berechnung des Datums:

Ich versuche gerade ein zukünftiges Datum aus einem Eintrag in meiner Tabelle zu berechnen, der mit MySQL-DateTime formatiert ist.

z.B.:

//php

$Date = "2008-04-04 00:00:00"

$FutureDate = strtotime($Date,"+1 weeks");

echo $FutureDate;

//end php

$FutureDate gibt daraufhin folgendes aus: 1207260000

Erinnert mich irgendwie an "vergangene Sekunden seit 1.1.1970".

Kann man daraus irgendwie wieder ein Datumsformat "yyyy-mm-dd" erzeugen oder muss man völlig anders an die Sache herangehen?

Danke im Voraus!
 
Das geht - lies dir mal http://de2.php.net/date durch.
smile.gif
 
Ok, habs gefunden - obwohl es ein bisschen versteckt war ;-)

//php

function sql_date_shift($date, $shift)
{
return date("Y-m-d H:i:s" , strtotime($shift, strtotime($date)));
}

$date = "2008-04-04";
$shift = "+1 weeks"; // could be days, weeks... see function strtotime() for usage

echo sql_date_shift($date, $shift);