Autoload wirft Fehler

Hallo,

ich habe ein Problem mit der __autoload.php. Folgender Inhalt ist dort eingetragen:

<?php

require_once(IPS_GetKernelDir() . "scripts/19426.ips.php");

Das Script mit der ID 19426 sieht wie folgt aus:

<?php

$scriptIDs = IPS_GetChildrenIDs(19426);
foreach ($scriptIDs as $scriptID) {
    include_once(IPS_GetScriptFile($scriptID));
}

Beim Start von Symcon kommt jetzt folgende Meldung:

02.12.2024 08:03:24 | 00000 | MESSAGE | ScriptEngine         | Pretest for loading __autoload.php failed. __autoload.php will be disabled. Error:

Warning: Objekt #19426 existiert nicht in /var/lib/symcon/scripts/19426.ips.php on line 3

Warum? Die Datei liegt dort im Ordner und wenn ich das Script direkt einbinde mit

include_once(IPS_GetKernelDir() . "scripts/19426.ips.php");

gibt es auch keine Fehler, nur über die __autoload.php macht es Probleme…

Um mir selber mal zu antworten und weil der eine oder andere evtl. auch auf dieses Problem stößt.
Wenn man vorher mit IPS_ObjectExists prüft dann funktioniert es. Die __autoload.php hat beim Start von Symcon wohl noch keine IDs zur Verfügung so wie ich das sehe.

$autoincludeID = 19426;
if (IPS_ObjectExists($autoincludeID)) {
    $scriptIDs = IPS_GetChildrenIDs($autoincludeID);
    foreach ($scriptIDs as $scriptID) {
        include_once(IPS_GetScriptFile($scriptID));
    }
}

Korrekt. Das liegt daran, dass die autoload auch beim Start von Symcon greift, bei der PHP und die PHP Module initialisiert werden. An der Stelle sind die Objekte noch nicht verfügbar.

paresy

1 „Gefällt mir“

Kann man diesen speziellen Startlauf denn herausfiltern und entsprechend einige Dinge einfach noch nicht laden? z.B: in dem ein DEFINE firstStart gesetzt wird?

Das sollte mit IPS_GetKernelRunlevel gehen.
Michael

1 „Gefällt mir“