Daten in Modul dauerhaft nachladen

Hi

ich habe eine Funktion auf einem Modul, welches eine Datei lädt und danach dauerhaft verfügbar sein soll.

    public function GetDPTs() {
        $this->dpts = unserialize(file_get_contents(__DIR__.'/../dpts.dat'));
        return print_r($this->dpts, 1);
    }

Jetzt finde ich es nicht so schön, dass bei jeder Abfrage die Datei geparst wird. Wo mache ich das am besten, so dass die Daten nur einmal geparst werden. Ich hatte es schon in Create versucht, aber bei einem folge Request sind die daten nicht mehr in $this->dpts verfügbar.

Du willst deinen geparsten Inhalten in einem Buffer oder Attribut speichern.

Buffer = flüchtig bis zum IP-Symcon Neustart
Attribut = persistent in der settings.json

paresy

Nicht persistent. Die Datei soll Initial gelesen werden und ggf. neugeladen werden wenn das Modul neu geladen (Update) wird.

https://www.symcon.de/service/dokumentation/entwicklerbereich/sdk-tools/sdk-php/module/setbuffer/

Das kenne ich schon. Das speichert nur einen String. Dann müsste ich jedesmal neu unserialize machen. Ich wollte sozusagen das geladene Array behalten.

Das ist leider nicht möglich, da die PHP Modul im weitesten Sinne „stateless“ sind und der PHP Interpreter ja auch jedes mal von vorne Anfängt. (Ansonsten müsste dein Modul aktiv bleiben und würde dauerhaft pro Instanz einen PHP-Slot belegen)

paresy

Ja sowas habe ich mir fast gedacht. Da bin ich von anderen Sprach wie Ruby verwöhnt. Da wird idR der Stack einmal geladen.

Welche Funktion wird den vor jedem Funktionsaufruf aufgerufen? Create() schonmal nicht.

Vielleicht exportiere ich das Array als PHP Code und kopiere es in die Klasse rein. So oft ändert sich das nicht.

Das wäre clever, da dann der OPCache für dich arbeitet :slight_smile:

paresy

Ich überlege das Array in eine externe php Datei auszulagern und in meiner klasse nur require nach meiner Klasse zu mache. So in etwa:

class Test {
static $dpts;
}
require 'dpts.php';

dpts.php

Test::$dpts = array(.....);

Sollte doch so gehen oder über sehe ich was?

Das müsste klappen.

paresy