Proces op achtergrond laten draaien
Ik heb een pagina while.php, het script op deze pagina bevat een oneindige while-lus.
Nu heb ik nog een pagina: start.php. Deze pagina moet de while.php pagina starten op de achtergrond. Het moet dus niet zo zijn, dat de pagina start.php blijft laden net zolang while.php draait.
Ik dacht aan system() of exec() om while.php aan te roepen en op de achtergrond te laten draaien, maar dan blijft de pagina maar laden.
Voorbeeld:
while.php
start.php
Code (php)
1
2
3
4
2
3
4
<?php
//Start while.php met bijvoorbeeld exec of system
echo 'Proces is gestart.';// dit zal nooit op het scherm komen, want while.php blijft maar draaien en draaien.
?>
//Start while.php met bijvoorbeeld exec of system
echo 'Proces is gestart.';// dit zal nooit op het scherm komen, want while.php blijft maar draaien en draaien.
?>
Edit:
Is het een beetje te begrijpen?
Gewijzigd op 01/01/1970 01:00:00 door Steff an
Het probleem is dat je met PHP geen meerdere dingen tegelijk kunt uitvoeren. Ofwel PHP ondersteund geen Threads. Om er toch voor te zorgen dat er iets op de achtergrond kan draaien zou je eens kunnen kijken naar een asynchrone ajax request.
edit:
Kijk hiervoor even naar de javascript prototype bibliotheek.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Zelfs een 'eeuwige' while() loopt toch tegen de timelimit op en timed dan out.
Als je een spelletje speelt dan zit je ook in een eeuwige lus (Render loop) en heeft echt geen timeout hoor.
Volgens mij als je dit doet:
Dan stopt het script alleen er geen geheugen meer is, volgens mij.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Tja, ik moet eerlijk zeggen, dat ik er eigenlijk zelf ook aan ging twijfelen.
Wat is inderdaad eeuwig, het ging om het idee... En die timelimit is wel uit te zetten.
@Martijn! is php niet instaat meerdere scripts tegelijk uit te voeren.. met sleep() is dat enigsinds optelossen. Of ik zal de waarden op moeten slaan en inderdaad mij elke AJAX request iets te laten uitvoeren.
Het probleem is dan, dat ik een verbinding met een server heb open staan via 'fsockopen' en de 'file pointer' is niet in een sessie op te slaan. Een nieuwe verbinding aanmaken is géén optie.
Gewijzigd op 01/01/1970 01:00:00 door Steff an
Als je met PHP Threads kunt maken dan kan PHP meerdere script (virtueel) tegelijk uitvoeren. Je zou ook eens aan de slag kunnen gaan met Java of C++ die talen kunnen wel Threads maken. Maar daar snap ik verder erg weinig van.
exec() gewoon 'php -f file.php' te starten direct op de server.
Ik weet niet of het mogelijk is om met Een hele andere oplossing zou zijn, dat ik de fsock-verbinding in een sessie op zou kunnen slaan, wat helaas niet mogelijk is. En dan met Ajax gaan werken.
Gewijzigd op 01/01/1970 01:00:00 door Steff an
Met die & aan het eind draait ie ook op de server op de achtergrond en dan geeft ie niets meer retour aan het script. Dat zou misschien moeten werken.
Edit: geprobeerdt, en nee. Met een & erachter werkt het ook niet.
edit2:
http://nl3.php.net/manual/nl/function.exec.php#35506
werkt wel!
Gewijzigd op 01/01/1970 01:00:00 door niek s