• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> 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!
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
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?
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
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 …
 

newmacuser24

Antonowka
Registriert
27.12.05
Beiträge
355
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....
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
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.
 

newmacuser24

Antonowka
Registriert
27.12.05
Beiträge
355
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...
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
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.
 

newmacuser24

Antonowka
Registriert
27.12.05
Beiträge
355
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!
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
Das geht - lies dir mal http://de2.php.net/date durch.
smile.gif
 

newmacuser24

Antonowka
Registriert
27.12.05
Beiträge
355
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);