SQL vagy más adatbázis minimális környezetben...

Kedves Fórumtársak!

Egy olyan helyre kellene írnom php-ban egy minimális php scriptet, ahol a PHP nincs telepítve, csak letöltve a windows-os gépre, kicsomagolva és CLI-ben fut.
Be kell olvasni egy könyvtár tartalmát és az újakat feldolgozni. Viszont két futás között jó lenne tudni mely fájlok jöttek létre. Ezt gondoltam valamilyen DB-be tenni, de az alap php7-ben csak mysqlnd van gyárilag. Mivel limitált a környezet, a fő rendszergazda nem ad szívesen jogot egy fájl futtatására sem, ezért marad a CLI mód.

Elsőre az SQLite-ra gondoltam, de kizárt, mert nem támogatott. :(
Nem szeretnék néhány ezer soros TXT fájlt parse-olni minden alkalommal, mivel évek alatt ki tudja mennyi jön létre. Mivel a fájlokat más program is használja, ezért a törlés/áthelyezés sem megoldás.

Valami tippetek van esetleg?

Köszi!

Throo

Hozzászólások

Csak azt tárolnám le egy fájlban, h mikor futott utoljára a szkript, és az annál újabb fájlokat dolgoznám fel a következő futtatáskor.

Nincs lehetőséged a már feldolgozott fájlokat berakni egy alkönyvtárba, amit utána nem monitorozol már?
A gyakorlatban ez sok ezer fájlnál már sokat gyorsít, már csak azon is, hogy nem kell mindig egy több ezres fájllistát átnéznie.

Nagy Péter
www.ddo.hu

Nincs, a fájlokat nem csak ez a program használná, egy másik program aki generálja és igény esetén törli. Mi csak egy mellékes részt kell írjunk, amit a fő program nem tud elvégezni. A sokezer fájl bizony tud lassú lenni, de ezt majd varrják a fő program fejlesztőinek a nyakába. :)

Ha csak az a feladat, hogy kövesd, hogy melyek az új file-ok (azaz az előző futás óta létrejött, vagy módosult file-ok), akkor nincs más dolgod, hogy feljegyezd valahova, hogy mely dátum volt az utolsó futás dátuma. Ezt megteheted úgy, hogy mondjuk egy .lastRun file access time-ját módosítod, vagy akár beleírod magát a dátum értékét is.
Futáskor előveszed a filet (ha még nem létezik a file, akkor ez az első futás, biztos, hogy nem dolgoztál még fel file-t), megnézed az access time-t (vagy beolvasod a benne lévő timestampet), és meg is van, hogy mely file-okat kell szűrnöd.
Teljesen felesleges a DB, ha nem akarod tárolni, hogy mely file-okat dolgoztad fel, csak azt kell eldöntened 1-1 file-ról, hogy feldolgoztad-e már vagy nem.

Hülye kérdés, de nincs előttem windows: adott fájl ha áthelyezéssel érkezik a mappába, akkor valamelyik dátuma frissül az aktuálisra? (Nem volt róla szó, hogy csak új fájlok jönnek létre a mappában. szerk.: "jó lenne tudni mely fájlok jöttek létre", ez lehet akkor mégis új fájlokat feltételez)

Mekkora a fájlok mérete? Problémát jelent, ha csinálsz egy mappát, összeveted a két mappát, és csak az új fájlokat dolgozod fel (és másolod át a "history" mappába)?

Írtad, hogy más is használja a fájlokat, ezért gondoltam az áthelyezés nem jó megoldás, de ha a fenti nem, akkor marad a log file irogatás, futás elején betöltés, abban strpos keresgélés, hogy van-e az adott fájl már benne, ha nincs akkor feldolgozás és naplózás, ha van átlépem.

Esetleg ki lehet x napnál régebbi fájlokat zárni? Fájlok listázásakor aktuális dátumnál 2 nappal régebbieket figyelmen kívül hagyni?

Elsőre az SQLite-ra gondoltam, de kizárt, mert nem támogatott. :(

Azt megkerdezhetem, miert nem tamogatott?

Most toltottem le a php.net-rol a 7.0.19 verziot (VC14 x86 Thread Safe (2017-May-09 20:36:44))
Miutan a php-ini-ben beallitottam az alabbi sorokat teljesen jol mukodott.

extension_dir="E:\Downloads\php\ext"
extension=php_sqlite3.dll
extension=php_pdo_sqlite.dll

xcopy *.txt c:\akarhova /C /F /H /D:05-25-2017
Ez csak az adott dátumnál újabb fájlokat másolja. Már csak azt kell megoldanod, hogy a dátum változó legyen és beolvassa egy fájlból, ahol tárolod az utolsó feldolgozás dátumát, majd az aktuális dátumot visszaírod. Alkalmasint ez egy egyszerű batch-el megoldható, amit berakhatsz a feladatütemezőbe és szépen lefut amikor akarod. Én így csinálnám, természetesen lehet jobb vagy egyszerűbb megoldás is.