Wie führe ich ein PHP-Skript kontinuierlich aus?

Lesezeit: 6 Minuten

Benutzeravatar von Shahram Mohseni
Shahram Mohseni

in einfache Worte fassen: Ich schreibe PHP-Skripte, die SMS senden und empfangen. Skripte berechnen, dass sie jede Woche Kampagnen-SMS an Benutzer senden, basierend auf jedem Benutzerregistrierungsdatum, z. B. jeden Montag 10 Uhr, SMS an Herrn senden. A und schickt jeden Freitag um 19 Uhr eine SMS an Miss B.. und PHP-Skripte kümmern sich um alles Notwendige..

Problem : Offensichtlich ist es eine sehr lustige Möglichkeit, dass jemand die Hauptseite meiner Anwendung etwa alle paar Sekunden aktualisiert, um weiter berechnen und verstehen zu können, was und wann Jobs zu erledigen sind, oder dass die Hauptseite immer auf meinem Computer geöffnet ist, also Javascripts und jquery erledigt den Rest!

Meine Frage : wie kann ich mein php programm oder scripte so etwas wie wach machen ohne das jemand die hauptseite auffrischen oder öffnen muss? Mit wach meine ich, wie es den nächsten Plan erkennt und ausführt und so weiter.

einige rohe Ideen zu beantworten : Vielleicht könnte ich alle 10 Sekunden die Hauptseite mit Ajax oder Curl aufrufen .. aber ich weiß nicht, wie ich Ajax oder Curl überhaupt wecken soll ..

Ich sehe einige Internet-Beiträge, die so etwas wie eine Befehlszeile entweder in Linux, Unix oder Windows vorschlagen. Aber ich greife normalerweise auf den Host zu, nicht auf die Befehlszeile, richtig? oder die Befehlszeile ist etwas im Host und ich weiß es nicht, wenn ja, helfen Sie mir bitte.

wichtiges Beispiel : Es gibt PHP-WP-Plugins wie Total Cache und Supper Cache, die scheinbar immer aktiv sind und von Zeitplänen wach sind, ohne dass jemand eine Seite aktualisieren muss.

Bitte geben Sie möglichst alle Antworten in PHP und PHP-Familien. Ich kenne Unix oder diese Art von Programmierung überhaupt nicht.

——- laut Antworten einige Fortschritte bei der Frage gemacht. Jetzt habe ich dieses folgende Skript:

ignore_user_abort(true);
set_time_limit(0);
$data = file_get_contents('filename.txt');
$data = $data+1;
file_put_contents('filename.txt', $data);
$page = $_SERVER['PHP_SELF'];
$sec = "4";
header("Refresh: $sec; url=$page");

Es klappt! auch wenn ich den lokalen Host neu starte. Das Hauptproblem ist jetzt, als ich die Hauptseite schloss, hörte es auf, in filename.txt zu inkrementieren, und wenn die Seite zwei Instanzen erneut anfing, wo das Inkrement fortgesetzt wurde, also: sollte es nicht weiter inkrementieren, auch wenn ich die Seite schließe? und wie stoppe ich es? und ist es normal, dass mehr als eine Instanz der Seite im Hintergrund ausgeführt wird?

endlich : Gemäß den Anweisungen auf dieser Seite ist es am besten, wenn ich eine Starter- oder Neuladeseite erstelle, dann Befehle verwende, um diese Neuladeseite zum Beispiel alle 1 Minute zu initiieren, und dann wie gewohnt PHPs schreibe.

last not least: Wie stoppt man dieses Hintergrundskript? für Update oder Wartung ..

  • Sie könnten immer CRON verwenden.

    – Jay Blanchard

    4. Januar 2017 um 13:37 Uhr

  • crontab verwenden. Erstellen Sie mehrere Cron-Jobs und geben Sie die Zeit in den Skripten an, indem Sie Parameter übergeben, etwa so ajax.php?sms=seven . Und die andere ajax.php?sms=ten

    – Rafael Shkembi

    4. Januar 2017 um 13:39 Uhr


  • Was ist CRON? ist es wie in PHP-Seiten geschrieben? und mehr, sagen wir, PHP berechnet die Zeit von sms=seven und die Zeit von sms=ten, die gesendet werden sollen, und liefert diese Zeiten vielleicht an CRON, richtig? wie startet CRON dann? läuft es immer auf normalen PHP-Servern?

    – Shahram Mohseni

    4. Januar 2017 um 13:54 Uhr


Benutzeravatar von Peter
Peter

Für dieses spezielle Problem wurden Cron-Jobs erfunden. Cron-Jobs sind zeitgesteuerte Jobs, die beispielsweise ein PHP-Skript ausführen können.

Sie könnten einen Cron-Job einrichten, um zu prüfen, welcher Benutzer jede Stunde seine SMS erhalten soll. Abhängig von Ihrem Betriebssystem können Sie diese Cronjobs einrichten. Für Linux-Distributionen gibt es unzählige Anleitungen, wie man dies einrichtet.

Aus Wikipedia:

Das Software-Dienstprogramm Cron ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Computerbetriebssystemen. Personen, die Softwareumgebungen einrichten und warten, verwenden cron, um Jobs (Befehle oder Shell-Skripte) so zu planen, dass sie regelmäßig zu festen Zeiten, Daten oder Intervallen ausgeführt werden. Es automatisiert normalerweise die Systemwartung oder -verwaltung – obwohl es aufgrund seiner universellen Natur nützlich ist, um beispielsweise Dateien aus dem Internet herunterzuladen und E-Mails in regelmäßigen Abständen herunterzuladen. Der Name Cron stammt vom griechischen Wort für Zeit, χρόνος (chronos). (Ken Thompson, Autor von cron, hat dies in einer privaten Kommunikation mit Brian Kernighan bestätigt.)

Ich habe eine Ressource hinzugefügt, die erklärt, wie Cron-Jobs verwendet werden.

Eine alternative Methode besteht darin, ein PHP-Skript im Hintergrund laufen zu lassen:

// Keep executing even if you close your browser
ignore_user_abort(true);

// Execute for an unlimited timespan
set_time_limit(0);

// Loop infinitely
// If you create a file called stop.txt,
// The script will stop executing
while (!file_exists('stop.txt')) {
    // Retrieve user data and sens sms messages

    // Wait for an hour
    sleep(3600);
}

Aktualisieren

ignore_user_abort(true);
set_time_limit(0);
$data = file_get_contents('filename.txt');
while (!file_exists('stop.txt')) {
    // Add 1 to $data
    $data = $data+1;
    // Update file
    file_put_contents('filename.txt', $data);

    // Wait 4 seconds
    sleep(4);
}

Um die Ausführung zu stoppen, erstellen Sie eine Datei namens stop.txt

Ressourcen

  • Wie ich verstanden habe, wenn ich die Seite nur einmal besuche, läuft sie so, als wäre sie geöffnet. Und sehr wichtig, unterstützt sie jquery im Hintergrundmodus >

    – Shahram Mohseni

    4. Januar 2017 um 14:05 Uhr

  • Nein, es kann jquery nicht im Hintergrund unterstützen, da jQuery eine clientseitige Sprache ist und nicht auf dem Server ausgeführt werden kann.

    – Petrus

    4. Januar 2017 um 14:07 Uhr

  • Langlaufende PHP-Skripte sind fehleranfällig und benötigen Möglichkeiten zur automatischen Wiederherstellung nach einem Abbruch oder Hängenbleiben. Der beste Weg, um das Ziel von OP zu erreichen, besteht darin, einen Cron-Job zu verwenden, um alle 1, 5 oder wie viele Minuten auch immer ein Skript abzufragen. Dieses Skript sollte eine Datei (oder einen DB-Wert) auf ein Datum und eine Uhrzeit überprüfen. Wenn das Datum + die Uhrzeit ≤ der aktuellen Uhrzeit ist, sollte es die vollständige Warteschlange der Aufgaben durchsuchen und alle bereiten Aufgaben ausführen. Dieser Datums- und Uhrzeitwert sollte mit dem nächstfrühsten aus der Warteschlange aktualisiert werden, wenn Aufgaben hinzugefügt/entfernt/beendet werden. Dies ist effizienter, als jedes Mal die gesamte Warteschlange zu durchsuchen.

    – Wal

    4. Januar 2017 um 14:47 Uhr

  • Peter, ich habe meine Frage durch Ihre Antwort erweitert. Bitte überprüfen Sie sie unter der Hauptfrage oben.

    – Shahram Mohseni

    4. Januar 2017 um 15:05 Uhr


  • Sie können mir danken, indem Sie meine Antwort akzeptieren, indem Sie auf die Schaltfläche links neben meiner Antwort klicken.

    – Petrus

    4. Januar 2017 um 15:25 Uhr

Sie können Cron-Jobs auf fast allen Servern erstellen, ohne auf die Eingabeaufforderung zuzugreifen.

Der Cron-Job kann verwendet werden, um PHP-Skripte in CLI in bestimmten Intervallen wie jede Minute, jede Stunde usw. zu initialisieren

  • Bitte führen Sie eine Suche durch. Es ist überall im Internet verfügbar.

    – Ima

    4. Januar 2017 um 14:03 Uhr

  • cyberciti.biz/faq/…

    – Ima

    4. Januar 2017 um 14:04 Uhr

  • Was ist Ihr Hosting-Partner?

    – Ima

    4. Januar 2017 um 14:04 Uhr

  • Tut mir leid, ich bin schwach in Worten. Partner im Gastgeber? Wenn es sich um Webhosting handelt, ist es bertina.us. Wenn Sie das SMS-Gateway meinen, ist es www.sms.ir

    – Shahram Mohseni

    4. Januar 2017 um 14:08 Uhr

1428880cookie-checkWie führe ich ein PHP-Skript kontinuierlich aus?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy