PHP - Terminal alternative zur Sessionvariable gesucht

zerosys

Enthusiast
Thread Starter
Mitglied seit
05.01.2007
Beiträge
2.279
Moin Leute,

ein viel besserer Titel ist mir auf die schnelle nicht eingefallen hier mal die Situation:

Ich habe ein PHP Skript Skript Awelches grob gesagt einige Daten in eine DB schreibt, nach jedem Schreibvorgang rufe ich in diesem PHP-Skript durch
Code:
system('curl --silent -S http://localhost/log/access.php');
das PHP-Skript Skript B auf.

Skript A wird ebenfalls durch curl (mit einem Cronjob) über ein Linuxterminal "ausgeführt".
Nun ist es so, dass ich in Skript B eine Datei einlese, mir die Zeilennummer in eine Sessionvariable speicher und bei dieser Zeilennummer im nächsten Aufruf weitergemacht wird. Durch die Sessionvariable ist das Browserseitig kein Problem, nur wie bekomme ich es hin wenn ich keinen Browser im Einsatz habe und alles über curl im Terminal läuft?

Alternativ könnte ich die Datei jedes mal kopieren und das Original dann löschen, dann ist es kein Problem wenn jedes mal bei Zeile 1 angefangen wird...

Eventuell hab ich diesbezüglich aktuell ein Denkproblem, für Lösungsansätze wäre ich daher dankbar.

Gruß
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Das ist generell ein ziemlich zweifelhafter Ansatz. Es gibt keinen Grund eine solche Aufgabe in irgendeiner Weise mit Curl zu lösen. Zuerst einmal: Die Datei "access.php" per Systemaufruf auszuführen ist eine ziemlich schlechte Idee. Nutz einfach PHPs "require"-Statement:

Code:
require 'log/access.php';

Auch das Script A musst du nicht via Curl aufrufen. Änder den Cronjob einfach in so etwas ab:

Code:
* * * * * php /pfad/zum/scriptA.php

So brauchst du dann gar keinen Webserver mehr.

Die Zeilennummer könntest du dir in eine Datenbank oder, wenn du keine Datenbank hast, in eine Datei schreiben:

Code:
// Speichern
file_put_contents('lineNumber', $lineNumber);
// Auslesen
$lineNumber = file_get_contents('lineNumber');
unlink('lineNumber');

Insgesamt stellt sich mir aber die Frage wieso du die Datei nicht direkt ganz einliest oder, wenn sie vllt laufend größer wird, einfach eine Endlosschleife laufen lässt:

Code:
set_time_limit(0);

while (true) {
    // Zeugs, was gemacht werden soll
    if ($bedingungFuerAbbruchDesScripts) {
        exit 0;
    }
    sleep(60); //Eventuell, falls gewartet werden soll
}
 
Zuletzt bearbeitet:
Das ist generell ein ziemlich zweifelhafter Ansatz. Es gibt keinen Grund eine solche Aufgabe in irgendeiner Weise mit Curl zu lösen. Zuerst einmal: Die Datei "access.php" per Systemaufruf auszuführen ist eine ziemlich schlechte Idee. Nutz einfach PHPs "require"-Statement:

Code:
require 'log/access.php';

Funktioniert, danke!

Auch das Script A musst du nicht via Curl aufrufen. Änder den Cronjob einfach in so etwas ab:

Code:
* * * * * php /pfad/zum/scriptA.php

So brauchst du dann gar keinen Webserver mehr.

Funktioniert, danke!

Die Zeilennummer könntest du dir in eine Datenbank oder, wenn du keine Datenbank hast, in eine Datei schreiben:

Code:
// Speichern
file_put_contents('lineNumber', $lineNumber);
// Auslesen
$lineNumber = file_get_contents('lineNumber');
unlink('lineNumber');

An die DB hab ich garnicht gedacht, hab ich jetzt so umgesetzt, funktioniert, danke!

Insgesamt stellt sich mir aber die Frage wieso du die Datei nicht direkt ganz einliest oder, wenn sie vllt laufend größer wird, einfach eine Endlosschleife laufen lässt:

Code:
set_time_limit(0);

while (true) {
    // Zeugs, was gemacht werden soll
    if ($bedingungFuerAbbruchDesScripts) {
        exit 0;
    }
    sleep(60); //Eventuell, falls gewartet werden soll
}

Hm ja, gibt sicherlich viele Lösungen. Die Datei wird laufend größer und der Inhalt wird "durchsucht" und entsprechend etwas in einer Datenbank hinterlegt. Durchsuche ich die Datei immer wieder von 0, gibt es duplizierte Einträge. Dies kann ich durch SQL ja durch IGNORE lösen. Aber leere ich die Tabelle mal, werden bei erneutem Ausführen wieder alle alten Suchergebnisse eingetragen..

Daher zähle ich einfach mit und fange beim nächsten Aufruf (der ist variable) einfach wieder da an wo vorher aufgehört wurde.


Danke für deine Lösungsvorschläge, wie gesagt, umgesetzt und klappt!
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh