ugrás a tartalomhoz

PHP végtelenített ciklus bezárása...

Suncius · 2012. Dec. 24. (H), 00.03
Sziasztok!
Problémám a következő:
Van egy PHP fájlom ami egy végtelen ciklust futtat... a kérdésem az, hogyan lehet leállítani ezt a ciklus egy billentyű leütésével vagy egy gomb megnyomásával?
Tehát a rendszergazda számára jó lenne csinálni valamit, amit ha leüt/rákattint akkor kilép a ciklusból, esetleg kiír valamit... ehhez feltételezem kliens oldali programozás kellene, vagy már fogalmam sincs 4 óra gépelés után XD
Szóval tudna ebben segíteni valaki? :D
 
1

Kell valamilyen felületet

inf · 2012. Dec. 24. (H), 01.06
Kell valamilyen felületet kialakítanod, amin keresztül el tudod érni a ciklusodat. Nem hiszem, hogy php-ben támogatott olyan szinten az UI készítés, hogy gombnyomást meg egérmozgást meg ilyesmiket tud érzékelni (a böngészők biztosítják neki az UI-t általában), de ezt google-el könnyen ki tudod deríteni. Én inkább olyan irányba mennék, hogy csinálsz egy http szervert, vagy egy cli-s alkalmazást, és azon keresztül kommunikálsz a gombnyomásnál, a gombnyomás elfogására meg vagy biztosít valamit az oprendszer, vagy egy másik alkalmazást kell feltenni hozzá, ami erre lett kitalálva.
2

Google nekem kb semmit nem

inf · 2012. Dec. 24. (H), 01.12
Google nekem kb semmit nem dobott a php daemon keypress szavakra, szóval 95%, hogy arra nem php-t kell majd használnod. A php daemonok írásához nem értek, de biztosan be lehet állítani rajtuk, hogy milyen portot figyeljenek, vagy hogy hogyan fogadják az ilyen kéréseket...

off: Vannak olyan nyelvek, amik sokkal alkalmasabbak ilyesmire.
3

Nekem ez nem teljesen tiszta:

eddig bírtam szó nélkül · 2012. Dec. 24. (H), 01.41
Nekem ez nem teljesen tiszta: PHP cli-t használva futtatsz valamit? Mert ugye a webszerver korlátozza egy-egy script max. futásidejét.

Ha úgy van, ahogy inf3rno írta, akkor én valami olyasmit követnék el, hogy valami egyedi azonosítót rendelnék a programhoz (pid - alias process id tűnik jó választásnak), abból generálnék egy fájlnevet és ezzel létrehoznék egy üres fájlt valahol (pl /var/tmp). A cikluson belül vagy azt figyelném, hogy megvan-e még a fájl (ekkor a törlésével lehet leállítani), vagy azt, hogy az utolsó módosítás időpontja változott-e mióta elindult a ciklus (ebben az esetben pl. egy touch paranccsal lehet leállítani).
Vagy valami ehhez hasonló.
Kulturáltabb, de lényegesen bonyolultabb módszerekhez pár eszközt mondjuk itt találsz: http://php.net/manual/en/book.sem.php

http://php.net/manual/en/function.msg-get-queue.php - itt valami példát is találsz, ha igaz, a MQ-s társalgásra.
4

Signal

janoszen · 2012. Dec. 24. (H), 03.04
Ha CLI-bol futtatod a programot, akkor relative egyszeru, a pcntl_signal() fuggvennyel tudsz signalokat kezelni, miutan beallitottad a declare(ticks = 1);-et.

Ha webszerverbol futtatod, a legtrivialisabb megoldas az, hogy ha nehany masodpercenkent csinalsz egy adatbazis lekerdezest, amibol eredmenykent megkapod, hogy le kell-e allni.

Valamiert nekem viszont az a meglatasom, hogy Te egy egeszen mas problemat akarsz megoldani, amit kerdeztel pusztan a kovetkezmenye. Mi lenne, ha leirnad az eredeti feladatodat, hatha van ra sokkal jobb megoldas?
5

Talán memcached-el, vagy

inf · 2012. Dec. 25. (K), 01.00
Talán memcached-el, vagy valami hasonlóval lehetne szűkíteni a lekérdezési időt úgy, hogy ne menjen szét a szerver. Nekem is gyanús a kérdésnél, hogy nem biztos, hogy ez a legjobb megoldás.