2009-05-14 4 views
10

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

7

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.

+0

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

+0

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. –

+1

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

-1

Wenn Sie auf einem * nix-Umgebung sind, können Sie cron jobs

1

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 
3

Sie können auch Web Based Cron verwenden, wenn Sie eine Website auf einem Zeitintervall treffen wollen.

+0

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 –

-1

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.

+1

Er fragte speziell nach einer Alternative zu Cron, deshalb habe ich diese Antwort abgelehnt. – Veehmot

12

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()); 
    } 
} 
+0

das ist klug, schön! Ich werde jedoch mehr auf Pufferfunktionen schauen, da es besser für das ist, was ich brauche. – Adriana

+0

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

+0

Sie können Ihre Website-Besucher führen lassen oder sie von einem anderen System aufrufen, auf das Sie Zugriff haben, usw. – cOle2

1

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.

2

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.

0

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.

Verwandte Themen