V7.0 Änderungen bzgl. __autoload.php?

Servus zusammen,

wurde von 6.4 auf 7.0 auf Linux irgendetwas bzgl. der __autoload.php geändert, was mir entgangen ist?

Kein Script, welches auf Funktionen zurückgreift, die über die __autoload.php geladen werden funktioniert mehr bei mir.

Das autoload-Script habe ich in ein IPS Script kopiert und dort funktioniert es fehlerfrei.

Es ist, wie wenn die __autoload.php nicht mehr geladen würde.

VG,
Günter

Ich antworte mir mal selbst, um den Stand meiner Nachforschungen mitzuteilen:

Irgendwie hat das wohl mit der Variable $_IPS[„AUTOLOAD“] zu tun.
Über diese finde ich leider keine Informationen.
Sie ist beim Aufruf der /usr/share/symcon/scripts/__autoinclude.inc.php false.
Damit werden die Befehle nach if (!isset($_IPS[„AUTOLOAD“]) || $_IPS[„AUTOLOAD“]) nicht ausgeführt und damit funktioniert der Autoload nicht mehr.
Kommentiere ich die Zeile aus funktioniert alles wie bei 6.4

Kann mir jemand bitte weiterhelfen, was es mit $_IPS[„AUTOLOAD“] auf sich hat?

VG, Günter

Ja, deine autoload muss irgendwie Ausgaben oder Fehler erzeugen und wird deshalb zur Sicherheit deaktiviert. Schau mal bitte ins Logfile. Dort sollte recht am Anfang der Text mit einer passenden Meldung fehlschlagen.

paresy

Danke schon mal.

OK, da gibt es eine Meldung:
20.11.2023 00:11:07 | 00000 | MESSAGE | ScriptEngine | Pretest for loading __autoload.php failed. __autoload.php will be d
isabled. Error:

Warning: Kernel module SyncRemoteService is not available in /var/lib/symcon/scripts/__autoload.php on line 4

Meine __autoload.php sieht so aus:

<?php

$autoinclude = 46499 /*[Globale Skripte\Autoinclude]*/;
if (IPS_ObjectExists($autoinclude))
{
	$script_ids = IPS_GetChildrenIDs($autoinclude);

	foreach($script_ids as $script_id)
	{
		if ($_IPS['SELF'] <> $script_id)
			include_once(IPS_GetScriptFile($script_id));
	}
}

Insofern kann ich die Fehlermeldung nicht nachvollziehen.

GGü

Folgende Änderung (Zeile 4) hat es gebracht, obwohl ich die Fehlermeldung immer noch nicht nachvollziehen kann:

if (@IPS_ObjectExists($autoinclude))

Ich habe zum nächsten Update mal den Precheck auf etwas später verlagert, damit die Kernel-Module alle korrekt geladen sind.

paresy

Perfekt!

Dann kann ich mir die zusätzlichen Abfragen, welche aus einem frühen Aufruf resultieren, sparen.

Danke,
Günter

Vorschläge:

  • generell einen „Autoload“ Ordner in Symcon etablieren, dessen Inhalt (Skripte) bei jedem Script-Aufruf geladen wird (für diejenigen, die sich noch nicht an Module gewagt haben)
  • oder ein Modul, in welchem man immer auszuführende Script-IDs hinterlegt