Hilfe! IPS_Runscript auf "externes" Script???

Hallo,

ist es tatsächlich so, dass man Scripte, die zwar im Scriptverzeichnis sind, aber NICHT im Objektbaum eingebunden sind, zwar mittels include() in ein Script „einbinden“ kann, aber nicht mit IPS_RunScript() oder einer ähnlichen Anweisung ausführen kann?

Ist das ein IPS-Mangel, böse Absicht oder hab ich nen Befehl übersehen?

Danke
jwka

Gegenfrage:

Hat ein externes Script eine ID?:wink:

Das Funktionsprinzip von IPS sollte dir doch aber geläufig sein…

Was bitte hat das mit der ID zu tun?

Deine Aussage logisch und konsequent weiter gesponnen würde auch heissen: kein Include ohne ID.

Ein Script (wie auch Include-Teile) ist ein PHP file. In einem von IPS gestarteten Script muss nicht zwingend auf IPS Spezifika zurückgegriffen werden, und IPS startet schlicht einen weiteren PHP Thread je Skript.

Insofern gibt es m.E. keine wirklich logische Erklärung, warum IPS nicht auch jedes beliebige PHP File starten können solle.

Dass es gwollt sein kann, ist was anderes.

jwka

Weil IPS eben auf der Verwendung von ID’s aufgebaut ist und ein in IPS „registriertes“ (nicht externes Script) als Objekt mit einer eigenen ID versehen wird.
So ist es nunmal… und wenn du’s noch genauer wissen willst, dann lies die Doku… IPS_RunScript: IP-Symcon :: Automatisierungssoftware

Naja, man kann es lösen, ist halt „von Hinten durch die Brust …“:

Man braucht ein HilfsScript mit einer einzigen Code-Zeile:


include $file;

Und statt dann im aufrufenden Script zu schreiben:


IPS_RunScriptExXX( IPS_GetKernelDir() . "<pfad>\\<script>.php" );

Schreibt man


IPS_RunScriptEx( 12345, array("file"=> IPS_GetKernelDir() . "<pfad>\\<script>.php")  );

Wobei 12345 die Objekt-ID des Hilfsscripts ist.

Ob das dann allerdings zum Verständnis des Code beiträgt, na, ich weiss auch nicht …

jwka

Auch wenn mir persönlich die Diskussionen nicht immer gefallen, hier hat jwka recht.

Wenn du den Verweis gelesen hättest

SkriptID Erlaubt den uneindeutigen Namen (V1 Kompatibilität) oder die eindeutige SkriptID (empfohlen)

dann hättest du festgestellt, dass gemäß Doku auch ein „uneindeutiger Name“ funktionieren sollte.

Das ist aber leider nicht so.

Wobei ein include tatsächlich problemlos ausgeführt wird.

Der uneindeutige Name bezieht sich auf Skripte, die im Objektbaum existieren und dort den uneindeutigen Namen haben. Die Existenz im Objektbaum geht mit der Existenz einer eigenen ID daher, was wiederum heißt, dass Skripte ohne ID einfach nicht von IPS_RunScript ausgeführt werden. IPS_RunScript ist halt einfach nur eine Funktion zum Ausführen von im IPS-Objektbaum registrierten Skripten. Zum Ausführen von dort nicht vorhandenen Skripten ist sie nicht gedacht und das wird sich auch nicht ändern. Dafür gibt es include, require und ähnliches. Dass IPS auch Skripte ohne ID ausführen kann ist keine Frage, schließlich hat kein Skript, dass man vom Webbrowser aus ausführt, eine ID.