[PHP] Script oder Funktion im Hintergrund laufen lassen

Christof

Well-known member
ID: 40685
L
18 Mai 2006
71
0
Hallo zusammen,

ich habe folgendes Problem:
Es wird eine Seite geladen, in welcher eine PHP-Funktion ausgeführt wird. Diese funktion brauch aber bis zu 4 Minuten, also hält Sie den ganzen Seiten-Ladevorgang auf.

Gibt es eine Möglichkeit die Funktion aufzurufen ohne dass das Script wartet bis diese fertig ist?

Ich könnte das ganze auch in eine externe Datei verlagern und diese dann per exec, .... ausführen, aber dann habe ich das Problem, dass es nicht plattform unabhängig ist, denn diese Aplikation muss auf UNIX und Windows Systemen funktionieren.

Kann mir da einer diesbezüglich helfen?

Danke im Vorraus.
 
Danke für die schnelle Antwort.

Leider hat es nichts gebracht. Das Problem ist, dass sich die Seite immernoch im Ladezustand befindet bis das Bild (geladen) ist. Ich benutze auf dieser Seite aber XMLhttpRecuest zwegs einen Ladebalken, und solange die Seite nicht fertiggeladen ist, tut sich da nichts ... Also muss diese Funktion irgendwie komplett im Hintergrund ablaufen. Irgendwie ausgekapselt werden.

Ein Frame /iFrame vielleicht ... aber das sit doch voll unsauber :(
EDIT: Habe festgestellt, dass die Seite auch solnge im Ladezusatnd ist bis das iFrame da ist :(

Weißt du oder sonst irgendjemand was dazu?
 
Hi Christof alte Hütte ;)

was wäre, wenn du die PHP-Datei nicht als Bild einbaust sondern mit XMLHttpRequest aufrufst?
 
Servus ... lange nichts mehr von dir gehört.

Die Idee ist ja eigentlich echt gut, aber das scheint auch nicht zu gehen, der hat irgendwie Probleme mit 2 Requests ... Also der hällt das eine auf.

Request 1 dauert 4 Minuten und wir nur einmal ausgeführt.

Request 2 geht sehr schnell und wiederholt sich jede Sekunde.

Wenn jetzt das erste läuft kann das zweite nicht ausgeführt werden bis das erste fertig ist.

Das zweite ist übrigens ein Ladebalken was von anfag an laufen muss.
 
Moin moin,
hast du javascript zur verfügung? Falls ja könntest du diesen so lange dauernden prozess in eine seperate datei auslagern und beim laden der seite mit öffnen lassen. Also quasi per ajax request den prozess starten und das ergebniss falls nötig(oder eventuelle fortschrittsanzeigen) zurück an die hauptseite senden lassen. Das is die einzige mir bekannte möglichkeit einen prozess wirklich im hintergrund laufen zu lassen. Die hauptseite würde gänzlich unabhängig vom im hintergrund laufenden prozess fertig laden.
Nach diesem prinzip hab ich mein manuelles db backup realisiert. Also im admin bereich meiner seite(n) klicke ich quasi auf 'backup starten' und per ajax wird dann der seperate backup prozess gestartet welcher kontinuierlich den fortschritt an den hauptfenster sendet. Für mich hat das den vorteil dass ich sogar während der prozess noch läuft auch andere prozesse starten kann ohne den ersten zu beeinflussen. Is zwar etwas trickreich so etwas zu realisieren, aber machbar ist es.
 
Christof schrieb:
Servus ... lange nichts mehr von dir gehört.

Die Idee ist ja eigentlich echt gut, aber das scheint auch nicht zu gehen, der hat irgendwie Probleme mit 2 Requests ... Also der hällt das eine auf.

Request 1 dauert 4 Minuten und wir nur einmal ausgeführt.

Request 2 geht sehr schnell und wiederholt sich jede Sekunde.

Wenn jetzt das erste läuft kann das zweite nicht ausgeführt werden bis das erste fertig ist.

Das zweite ist übrigens ein Ladebalken was von anfag an laufen muss.

hmmm komisch, dass is mir neu, aber gt zu wissen. und wenn du deine datei einfach per cron laufen lässt oder is das user abhängig?