Skript von Browser trennen

Hallo Experten,

ich möchte über das Versenden eines Formulars ein PHP-Skript aufrufen, das die eingegebenen Daten prozessiert. Dieser Prozess dauert bis zu 2 Minuten. Ich habe mir das nun so vorgestellt, dass ich den Output des Skripts in eine Datei leite. Sobald diese Datei existiert (wird ganz als letztes vom Skript erstellt), soll diese geladen werden. In der Zwischenzeit soll ein zweites, sich selbst auffrischendes Skript ca. alle 10 Sekunden die Existenz der Output-Datei prüfen und diese bei Existenz aufrufen, während das erste Skript fröhlich seinen Dienst auf dem Server tut, bis es abgeschlossen ist.

Mein Problem ist nun: Wie bekomme ich es hin, nach dem Absenden des Formulars an das erste Skript den Browser quasi von diesem zu trennen und das zweite Skript aufzurufen?

Viele Grüße
Huttatta

Hallo,

was du suchst ist vermutlich ein Fork. In den Kommentaren zur Dokumentation findet sich auch dein Fall (Programm ausführen nachdem Seite an den Client geschickt wurde).

http://php.net/manual/de/function.pcntl-fork.php

Gruß,
Steve

Hmm , das jetzt etwas kompliziert ,
wenn du nur den Output haben willst und das im browser
wäre ein javascript pull das richtige .
wenn aber wirklich das php das machen soll , weil der user gar nicht warten will bis die ansicht kommt , aber man die ansicht dennoch brauch (z.b. protokolierung) .
Dabei muss natürlich jede Datei ihren eigenen Namen haben :wink: sonst überschreibt der nächste proßess .

Es liegt also eher daran was du erreichen willst . Entweder einfach oder schwer .

Hallo TechPech,

Hmm , das jetzt etwas kompliziert ,

mir wird schon schwummerig. :wink:

wenn du nur den Output haben willst und das im browser
wäre ein javascript pull das richtige .

Im Grunde brauche ich zum überbrücken der Wartezeit (während der lange Protzess im Hintergrund läuft) bloß ein Skript, das prüft, ob die HTML-Datei vorhanden ist und entweder „Dauert noch. Update in 10 Sekunden.“ anzeigt oder die HTML-Datei lädt, sobald sie vorhanden ist. Das Skript könnte sich im Browser per JS oder meta refresh alle z.B. 10 Sekunden aktualisieren, bis die Datei (Name wird in Session gespeichert) gefunden und geladen wird.

wenn aber wirklich das php das machen soll , weil der user gar
nicht warten will bis die ansicht kommt , aber man die ansicht
dennoch brauch (z.b. protokolierung) .

Wie gesagt, brauche ich das nur als Pausenfüller, damit der Benutzer nicht so lange vor einem leeren Bildschirm rumhängen muss und er das Gefühl behält, dass was passiert. Einen Teil-Output per flush()/ob_flush() will ich nicht.

Dabei muss natürlich jede Datei ihren eigenen Namen haben :wink:
sonst überschreibt der nächste proßess .

Ein alphanumerischer Zufallsstring mit 20+ Zeichen dürfte genügen, um das zu verhindern.

Es liegt also eher daran was du erreichen willst . Entweder
einfach oder schwer .

Egal, wenn du eine Lösung kennst, bitte her damit. :wink:

Fällt mir gerade ein: Ich werde mal probieren, im langen Script per flush()/ob_flush() einen Output zu erzwingen, der dafür sorgt, dass clientseitig das zweite Skript geladen wird und hoffe, dass das lange Skript nicht abbricht, wenn die Verbindung zum Browser verloren geht. Mal sehen. Da gab’s doch was …

Gruß
Huttatta

Hallo Huttatta,

zu meiner Entschuldigung, ich habe den Thread nur überflogen, aber schau dir mal RabbitMQ an: https://www.rabbitmq.com/tutorials/tutorial-two-php…

Vielleicht löst das dein Problem!

Gruß XXD