ugrás a tartalomhoz

Folyamatosan futó PHP script, timeout nélkül?

balatonl · 2005. Jan. 26. (Sze), 16.48
Tanácsra van szükségem.

Előtte felvázolom a hátteret.

Egy olyan XML fájlt generáló scriptet készítek, amely Oracle adatbázisból dolgozik, és PHP nyelven íródott. Az Oracle adatbázisban található adatmennyiség olyan méretű, hogy ha egy db XML-t generálnék, az várhatóan több száz megás méretű lenne.

Ezt azonban nem szeretném, az okok:
- a PHP timeout beállításai,
- a generálásra használt szerver korlátozott kapacitásai,
- a kockázat, hogy ha 24 óra futás után talál hibát a script, kezdhetem elölről a generálást.

Ezért úgy döntöttem, hogy több darabban hozom létre a legenerált XML fájlt.

Ehhez viszont a következő futás során használatos lekérdezésben szükséges kezdő azonosító értékét le kell tárolnom egy fájlban, majd meghívnom a scriptet újra, új paraméterrel.
(pl. MySQL-ben így nézne ki a lekérdezés: SELECT * FROM tabla WHERE id>'$kovetkezo' LIMIT 0,10000; ahol a $kovetkezo értékét a fájlból kapja a script az újbóli futás előtt)

Ehhez azonban folyamatosan figyelnem kell annak a fájlnak az értékét, amely a $kovetkezo változó értékét tartalmazza. Hogyan lehet PHP-ban ezt megoldani? Lehet olyan scriptet írni, amely folyamatosan fut a szerver memóriában, és figyeli egy változó értékét/fájl állapotát, timeout nélkül?

Minden tippet, tanácsot előre is köszönök.

Laci
 
1

Timeout

sajt · 2005. Jan. 26. (Sze), 16.56
A timeoutot lehet allitani:
http://www.php.net/function.set-time-limit
Ha nullara allitod, akkor nem lesz limit.
2

A timeout OK, nem ez a gond

balatonl · 2005. Jan. 26. (Sze), 17.05
Szia!

Köszi!

A timeout nem probléma, azt nullára állítom, ha kell. Ezzel azonban csak azt érem el, hogy végtelen ideig futhat a scriptem, és a végén kapok 1 darab XML output fájlt.

Én szeretnék több darab fájlt kapni, úgy, hogy a generálást végző PHP script mindig újra meg újra lefut, az egyes futások végén pedig mindig kiad egy XML output fájlt.

Minden alkalommal, amikor elkészül egy (pl. 10000 rekordot tartalmazó) output fájl, a generáló script újraindulna, de már a következő 10000 rekordot nyomná ki a futás végén létrehozandó XML output fájlba.

Azt, hogy a következő futás során hányadik rekordtól kell lekérdeznie az adatbázisból az XML generáláshoz szükséges adatokat, az ekkor egy külső fájlban elhelyezett változó értéke határozza meg.

A generálást végző script tehát mindig más paraméterrel kell, hogy újra meghívásra kerüljön --> ehhez viszont a paramétert ki kell olvasni a külső fájlból.

A külső fájlt folyamatosan figyelni kell. A kérdés: lehet-e PHP-ben olyan, folyamatosan a memóriában tartózkodó scriptet írni, amely figyeli egy fájl állapotát és ettől függően hívja meg a generálást végző függvényt újra?

Laci
3

Szerintem egy futas alatt aka

sajt · 2005. Jan. 26. (Sze), 17.21
Szerintem egy futas alatt akar tobb file-t is letre lehet hozni.
A file-t en ugy figyelnem, hogy mondjuk 1 percenkent beolvasnam, es megneznem, hogy az ertek valtozott-e. Erre jo a sleep fgv.
4

egy lehetséges megoldás

VBala · 2005. Jan. 26. (Sze), 23.48
Ha esetleg van shell hozzáférésed a szerveren, akkor crontabbal ezt egyszerűen meg lehet oldani, és a php-scriptnek nem kell napi 24 órában futnia. Én legalábbis úgy csinálnám, hogy percenként wget --spider http://localhost/akarmi.php, azt meg már sokféleképpen ellenőrizheted, hogy utolsó futás óta változott-e a fájl.
Persze, mégegyszer, ehhez shell hozzáférés kell.
5

Egy fajta megoldas

durexhop · 2005. Jan. 30. (V), 14.46
Ha php5-t hasznal a server akkor van lehetoseged daemon irasra, ezt inkabb itt nem reszleteznem... => http://hu.php.net/pcntl de itt elolvashatod... :} jo kis dolog, szerintem ezzel siman meg tudnad csinalni, ha vegeztel egy resszel vagy hiba van akkor kuldesz a daemonnak egy jelet es o tudja mit kell csinalni...