• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Aktualisieren einer Datenbank und der Anzeige

blabla333

Mitglied
Hallo,

ich habe folgendes Problem:

Über ein PHP-Script wird derzeit eine Liste von Elementen angezeigt (u.a. Textfelder). Die Liste ergibt sich aus einer SQL-Datenbank, welche wiederum über eine Schnittstelle "gefüttert" wird: In unregelmäßigen Abständen werden von extern Dateien in ein bestimmtes Verzeichnis geschickt, diese (XML-Dateien) werden dann in die SQL-Datenbank überführt). Ich hätte es nun gerne so, dass bei jeder neuen Datei, die in diesem Verzeichnis eintrifft, die Daten in die SQL-Datenbank übertragen werden und anschließend die Liste aktualisiert wird.

Problem 1: Gibt es überhaupt eine Möglichkeit, dass das/ein Script erkennt, dass eine neue Datei in einem Verzeichnis ist, so dass anschließend eine bestimmte Funktion (Einlesen der neuen Datei in die SQL-Datenbank und anschließendes Löschen) ausgeführt wird?
Problem 2: Es wird die ganze Zeit in er angezeigten Liste gearbeitet, d.h. es werden Textfelder ausgefüllt und anschließend abgeschickt. Insofern ist es für mich keine Option, dass sich die Liste einfach alle 30 Sekunden aktualisiert und dabei die neuen Dateien eingelesen werden, da es auf diese Weise passieren kann, dass die Seite während einer Eingabe einfach aktualisiert wird und somit die gerade unterbrochene Arbeit verloren wäre.

Versteht ihr mein Problem?

Ich habe im Moment leider gar keine Idee mit welchen Mitteln ich da herangehen kann...
 
Zu Punkt 1:
Schreib ein Script, welches jede Stunde per CRON ausgeführt wird und das Verzeichnis auf neue Dateien hin untersucht. Werden welche gefunden schreibst die neuen Dateien in die Datenbank und löscht selbige aus dem Verzeichnis (oder verschiebst sie in ein Archiv-Verzeichnis).
 
Ein cronjob kann auch jede Minute ein Script ausführen. Alternative dazu wäre nur noch ein Daemon oder Dienst den Du auf dem Server dauerhaft laufen lässt. Ob und wie Du das hinbekommst hängt von deiner Serverumgebung und deinen Möglichkeiten dort ab. Ein root-Server wäre für einen Daemon Pflicht. Auf Grund deiner Fragestellung bin ich mir aber unsicher, ob Du einen solchen hast.
 
Wie oben schon erwähnt, wenn der Server ein Linux-Server ist, dann kannst du nachfolgendes Shell-Script zur Echtzeit-Überwachung nutzen.
Voraussetzung ist wie gesagt ein Linux-Betriebssystem und installierte "inotify"-Tools!

Code:
#!/bin/sh


#    Scriptname: Watch-Script
#    Author    : Steffen Haase
#    Contact   : spidey2001[ät]web[dot]de


# Das "WATCHFOLDER" ist das zu überwachende Verzeichnis 
# (Slash am Ende muss gesetzt sein!).
WATCHFOLDER="/Pfad/zum/ueberwachenden/Verzeichnis/";
# Das "PHPSCRIPT" ist das Script, welches die Dateien dann 
# in die Datenbank hochläd und anschliessend vom Server löscht.
PHPSCRIPT="/Pfad/zum/PHP-Script.php";


# Hier wird die Überwachung mittels inotify gestartet.
inotifywait -mrq -e create --format %w%f $WATCHFOLDER | while read FILE
do
    # Hier führen wir bei Eingang neuer Dateien das PHP-Script aus
    php $PHPSCRIPT;
done

Das Script musst du dann einfach nur noch auf der Shell starten.
 
Danke. Also es ist tatsächlich ein Linux-Server. Aber ich muss gestehen, dass ich mit dieser Art von Scripten noch nie gearbeitet habe bzw. noch nie ein Linux-System "verändert" habe. Insofern ist das für mich Neuland.

Allerdings bliebe dann noch das Problem der Anzeige. Die eigentliche Applikation zeigt ja eine Liste von Elementen an. Jetzt wurden durch das obige Script neue Dateien in die Datenbank eingelesen. Der User sieht diese Änderungen aber noch nicht. Ich kann aber die Applikation nicht einfach alle X Sekunden aktualisieren, da der User ja gerade Eingaben tätigen könnte.
Gibt es dafür eine technische Lösung? Im Grunde müsste es ja asynchron laufen, oder? Also der User kann weiter auf der Seite arbeiten, aber es werden neue Elemente einfach an die bestehende Liste angehängt, sobald das obige Script durchlaufen wurde bzw. während es durchlaufen wird.
 
Asynchron ist das richtige Stichwort. Du suchst nach AJAX. D.h. Du müsstest beim Laden der Seite ein Script starten, welches alle X Millisekunden neue Daten vom Server abruft und wenn es welche gibt diese dann auch anzeigt.
 
Dann kann ich mir aber dieses obige Script ja sparen, oder? Wenn ich per AJAX regelmäßige Abfragen durchführe, können ja dadurch auch gleichzeitig die neuen Daten verarbeitet werden. Oder sehe ich das falsch?
 
Nicht unbedingt. Wenn Du die Abfrage per AJAX performant und ohne Wartezeit für den Nutzer realisieren willst, solltest Du AJAX wirklich nur zum Abrufen von Informationen nutzen, nicht zur Verarbeitung von irgendwelchen Daten die nicht vom Nutzer selbst kommen.
 
Zurück
Oben