Ich habe ein PHP-Skript, das eine Datei über HTTP liest (die Datei ist in einer anderen Domäne). Ich möchte diese Datei nur ein- oder zweimal am Tag lesen, anstatt mich bei jeder Aktualisierung der Website mit ihr zu verbinden. Gibt es einen anderen Weg als mit Cron? Ich möchte nicht Cron verwenden, weil ich dieses Verhalten im Skript selbst einrichten möchte .. so ist es flexibel, so dass ich es überall verwenden kann, ohne Cron jedes Mal einzurichten. dankWie kann ich PHP-Skript in bestimmten Abständen (z. B. einmal am Tag) ausführen?
Antwort
Wenn Sie nicht verwenden können oder wollen, verwenden Sie Cron und es ist in Ordnung, es nur zu aktualisieren, wenn auf die Seite zugegriffen wird. Sie können das Ergebnis der HTTP-Anforderung zwischenspeichern und nur auf einer Seite aktualisieren, wenn der Cache älter als ein Tag oder ein von Ihnen ausgewähltes Intervall ist.
Wenn Sie auf einem * nix-Umgebung sind, können Sie cron jobs
verwenden Sie einen Cronjob verwenden können. Sie können das PHP-Skript dann über die Befehlszeile ausführen.
Der Cronjob wäre der folgende, wenn Sie jeden Tag aktualisieren.
0 0 * 0 0 php /someplace/somefile.php
Sie können auch Web Based Cron verwenden, wenn Sie eine Website auf einem Zeitintervall treffen wollen.
Ich benutze Web-basierte Cron, weil ich VPN auf meinem Hosting-Paket nicht rechtfertigen konnte, und ich bin sehr zufrieden damit.Danke für den Zeiger –
Was ist los mit Cron?
Sie haben ein paar Möglichkeiten mit Cron - Ihre PHP kann durch die Kommandozeile PHP-Interpreter aufgerufen werden, oder Sie könnten wget oder fetch oder das Äquivalent verwenden, um Ihre PHP auf dem Server aufzurufen.
Im Allgemeinen hat PHP, das im Kontext des Webservers ausgeführt wird, ein Zeitlimit, wie lange es ausgeführt werden kann. Daher können Sie im Allgemeinen keine "Hintergrund" -PHP-Threads einrichten, um "später" zu arbeiten.
Er fragte speziell nach einer Alternative zu Cron, deshalb habe ich diese Antwort abgelehnt. – Veehmot
ich diese Art der Sache in der Vergangenheit getan haben, wenn ich keinen Zugriff auf Cron hatte: erklären Sie ausdrücklich
$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
$lastRun = file_get_contents($lastRunLog);
if (time() - $lastRun >= 86400) {
//its been more than a day so run our external file
$cron = file_get_contents('http://example.com/external/file.php');
//update lastrun.log with current time
file_put_contents($lastRunLog, time());
}
}
das ist klug, schön! Ich werde jedoch mehr auf Pufferfunktionen schauen, da es besser für das ist, was ich brauche. – Adriana
Aber Sie müssen den oben genannten Code in Intervall richtig ausführen? Ich meine, du solltest den Unterschied zwischen aktueller Zeit und lastRun irgendwie überprüfen. Wie machst du das ohne Cron? – user1512681
Sie können Ihre Website-Besucher führen lassen oder sie von einem anderen System aufrufen, auf das Sie Zugriff haben, usw. – cOle2
Da, dass Sie nicht Cron verwenden wollen, die einzige andere Weg Um dies zu tun (ohne etwas Ähnliches wie Cron), muss man sein Skript als Daemon einrichten. Wenn Sie jedoch nicht die Flexibilität benötigen, die Dämonen bieten, ist Cron viel einfacher und einfacher.
Hier ist eine daemon walk-through.
Sie könnten sogar eine Datenbanktabelle verwenden - wirklich einfach in Struktur, ID, Datum, Skript-URL und was immer Sie brauchen - und fügen Sie eine Zeile jedes Mal, wenn Sie das Skript ausführen.
Bevor Sie das Skript ausführen, überprüfen Sie einfach die Anzahl der Zeilen für jeden Tag, den Sie haben.
Wenn Sie eine Linux-Distribution mit systemd verwenden:
Ich hatte einen Bedarf an jährlichen Basis Jobs planen, unabhängig von der Anwendung (falls das System neu gestartet oder so etwas), und ich war die gegebene Vorschlag zur Verwendung systemd Timers. Der Arch Wiki Page darauf gibt einige Beispiele.
- 1. Wie kann ich eine Webseite einmal am Tag sichtbar machen?
- 2. Ausführen einer Aufgabe einmal pro Woche oder in regelmäßigen Abständen, iOS
- 3. Wie kann ich meine AppleScript in Abständen
- 4. Aufgabe einmal am Ende in Gradle ausführen
- 5. Eine Variable einmal am Tag dekrementieren - Javascript
- 6. Wie verwende ich die Buchfunktionen (z. B. Konkordanz) in NLTK?
- 7. Aufgabe läuft einmal am Tag auf Xamarin Forms
- 8. Android: Ausführen von Code in regelmäßigen Abständen
- 9. MySQL mehrere Elemente übereinstimmen, wo (A, B, Z) IN (A, B, C, E, Z)
- 10. Wie kann ich verlangen, dass Browser bestimmte Seitenelemente, wie z. B. CSS-Blätter, immer aktualisieren (z. B. niemals zwischenspeichern)?
- 11. Ausführen von nativen Windows-Befehlen (z. B. VOL) von Cygwin
- 12. Wie kann ich anwendungsspezifische Informationen in web.config speichern, z. B. wie viele Threads ausgeführt werden sollen?
- 13. Wie kann ich Ruby-Tests automatisch ausführen?
- 14. textView, z. B. kann nicht ausgewählt werden?
- 15. Quarz-Cron-Ausdruck in einer zweiwöchigen am bestimmten Tag für Einmal
- 16. Programm in bestimmten Intervallen ausführen
- 17. Wie kann die Wahlfunktion in einer Facebook App einmal am Tag eingeschränkt werden?
- 18. In XSLT, kann ich eine Vorlage nur einmal ausführen
- 19. Wie kann ich OnClick-Ereignisse nur einmal ausführen?
- 20. Planen Sie lokale Benachrichtigungen zu bestimmten Zeiten am Tag
- 21. Wie kann ich den Code einmal pro Sekunde ausführen?
- 22. Spring Scheduling Task - nur einmal ausführen
- 23. Wie kann ich Nightwatch-Tests in einer bestimmten Reihenfolge ausführen?
- 24. Wie funktionieren verteilte Transaktionen (z. B. MSDTC)?
- 25. Fehlerbehebung z. B. Flash 404
- 26. .htaccess [b] Tag
- 27. , wie am selben Tag des nächsten Monats von einem bestimmten Tag in Python erhalten Datetime mit
- 28. Was muss ich in der MySQL-Abfrage beachten, z. B.%?
- 29. Ändern eines Android-Dienstes zur Ausführung in bestimmten Abständen
- 30. Wie kann ich überprüfen, ob ich eine Website (z. B. LinkedIn) mit HtmlUnit angemeldet habe?
danke, bis jetzt bist du der einzige, der verstanden habe, dass ich auf andere weise als cron suche. Wie mache ich diesen Cache? ist APC was du meinst? – Adriana
APC ist eine Möglichkeit, einen schnellen In-Memory-Cache bereitzustellen, aber nicht der einzige Weg. Es gibt einen Memcaching, wenn Sie Ihren Cache auf mehrere Computer verteilen möchten. Alternativ könnten Sie einfach eine Kopie in die DB einfügen und keine neuen Technologien einbringen. –
Die einfachste Möglichkeit, Dinge zwischenzuspeichern, sollte die Verwendung der PHP-Funktion zur Pufferung von Ausgaben sein. (http://www.php.net/manual/en/function.ob-start.php) – Alo