2016-04-30 11 views
-1

Funktion, die etwa einen Tag im Hintergrund wartet und dann einen anderen ausführt.Wie kann ich eine PHP-Funktion für Tage verzögern?

Like:

function Sleep(){ 
    sleep(/* One Day */); 
    Run(); 
} 
function Run(){ 
    //One Day later, 
    //execute code. 
} 

Oder maby so etwas wie dies (das ist fiktiv):

class Waiter extends Timer{ 
    $time = 0; 
    function __construct($time){ 
     $this->time = $time; 
    } 
    function onDelay(){ 
     //One day Later. 
    } 
} 
$wait = new Waiter(/* One Day */); 

Gibt es eine gute Lösung?

Oder ist die Funktion sleep() auch okey? Aber ich muss sagen, dass die Ausführungszeit 30 Sekunden beträgt.

+7

Warum verwenden Sie nicht Cron Job? –

+0

Was ist der Kontext? Website ? Service geschrieben mit PHP CLI? – Mat

+0

Cron wäre in den meisten Fällen optimal. – Brian

Antwort

0

Wie Sie gesagt haben, beträgt die Ausführungszeit 30 Sekunden, das gesamte Skript wird nach 30 Sekunden beendet. Es kann nicht länger warten.

Wie bereits vorgeschlagen, könnten Sie einen Cron-Job verwenden.

Wenn Ihr Problem nicht regelmäßig wiederkehrend ist, könnten Sie ein kleines Skript schreiben, das die Zeit (mit Datum) schreibt, wann die Funktion in eine Datei (oder eine Datenbank) ausgeführt werden soll. Der Cron würde dann jede Stunde ausführen (oder wenn es wichtig ist, jede Minute) und prüft, ob die Funktion ausgeführt werden muss.

0

Verwenden Sie eine Cronjob ist die richtige Lösung für Ihr Problem. Wenn Sie es aus irgendeinem Grund nicht verwenden können, stellen Sie sicher, dass Sie ignore_user_abort(1) und set_time_limit(0); für das PHP-Skript verwenden.


int ignore_user_abort ([ bool $value ]) 

Beim Ausführen von PHP als Skriptbefehlszeile und das tty Drehbuch geht weg, ohne das Skript dann beendet wird, wird das Skript das nächste Mal versucht, stirbt, etwas zu schreiben, es sei denn, Wert auf TRUE gesetzt

bool set_time_limit (int $seconds) 

die Anzahl der Sekunden ein Script darf laufen. Wenn dies erreicht ist, gibt das Skript einen schwerwiegenden Fehler zurück. Das Standardlimit ist 30 Sekunden oder, falls vorhanden, der max_execution_time-Wert, der in der Datei php.ini definiert ist.

Beim Aufruf startet set_time_limit() den Timeout-Zähler von Null neu. Mit anderen Worten, wenn das Zeitlimit die Standard 30 Sekunden und 25 Sekunden in Skriptausführung ist, wird ein Aufruf wie set_time_limit (20) gemacht, das Skript wird für insgesamt 45 Sekunden vor dem Zeitlimit ausgeführt.

0

Crons wurden erwähnt, aber es gibt eine zweite Option - Warteschlange.

https://en.wikipedia.org/wiki/Message_queue

Es gibt eine Vielzahl von Warteschlangen Software zur Verfügung, von denen Sie sich wie Bohnenstange oder RabbitMQ auf gehostete diejenigen in der Cloud wie Amazon SQS oder IronMQ installieren.

Verwandte Themen