Proces op achtergrond laten draaien

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steff   an

Steff an

24/05/2007 20:23:00
Quote Anchor link
Mijn probleem is het volgende:

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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
while(1){
   //doe iets
}
?>


start.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
?>


Edit:
Is het een beetje te begrijpen?
Gewijzigd op 01/01/1970 01:00:00 door Steff an
 
PHP hulp

PHP hulp

23/04/2024 19:41:35
 
Martijn B

Martijn B

24/05/2007 20:31:00
Quote Anchor link
Ja ik snap het.

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
 
- SanThe -

- SanThe -

24/05/2007 20:37:00
Quote Anchor link
Zelfs een 'eeuwige' while() loopt toch tegen de timelimit op en timed dan out.
 
Martijn B

Martijn B

24/05/2007 20:44:00
Quote Anchor link
@SanThe:

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
set_time_limit(0);
?>


Dan stopt het script alleen er geen geheugen meer is, volgens mij.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
- SanThe -

- SanThe -

24/05/2007 20:47:00
Quote Anchor link
Tja, ik moet eerlijk zeggen, dat ik er eigenlijk zelf ook aan ging twijfelen.
 
Steff   an

Steff an

24/05/2007 20:48:00
Quote Anchor link
@Santhe
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
 
Martijn B

Martijn B

24/05/2007 20:54:00
Quote Anchor link
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.
 
- SanThe -

- SanThe -

24/05/2007 20:55:00
Quote Anchor link
Ik weet niet of het mogelijk is om met exec() gewoon 'php -f file.php' te starten direct op de server.
 
Steff   an

Steff an

24/05/2007 21:55:00
Quote Anchor link
Dat wil volgens mij wel, maar dan blijft die pagina waar exec('php -f file.php') in staat, wachten op dat programma dat uitgevoerd wordt.

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
 
- SanThe -

- SanThe -

24/05/2007 22:40:00
Quote Anchor link
Zo exec('php -f file.php &') toch niet.
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.
 
Niek s

niek s

25/05/2007 16:54:00
Quote Anchor link
Steffan's test locatie is op een Windows server. Ik zal het (zelfde project) inderdaad eens proberen met een & erachter. Helemaal vergeten inderdaad :)

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.