ich habe einige Variablen die über ein angehängtes Ereignis aktualisiert werden. Im Ereignis gibt es ja eine Aktion in der man PHP-Code ausführen kann. So… und dort binde ich dann immer ein Script per inlcude_once ein. Das hat bisher super funktioniert.
Bei einem der letzten Updates ist das kaputt gegangen und diese Variante spuckt Fehler:
17.12.2019, 15:05:00 | ScriptEngine | Result for Event 24504
<br />
<b>Warning</b>: include_once(Standard.ips.php): failed to open stream: No such file or directory in <b>C:\Windows\System32\-</b> on line <b>1</b><br />
<br />
<b>Warning</b>: include_once(): Failed opening 'Standard.ips.php' for inclusion (include_path='.;C:\php\pear') in <b>C:\Windows\System32\-</b> on line <b>1</b><br />
<br />
<b>Fatal error</b>: Uncaught Error: Call to undefined function get_currency() in C:\Windows\System32\-:2
Stack trace:
#0 {main}
thrown in <b>C:\Windows\System32\-</b> on line <b>2</b><br />
Das include_once funktioniert ansonsten in „normalen“ Scripten noch, nur eben nicht mehr in der Aktion PHP-Code ausführen.
IP-Symcon 5.3, Windows x64, 28.11.2019
Edit: Bug besteht auch in IP-Symcon 5.3, Windows x64, 16.12.2019, 0717398f8fbc
noch.
Was?
Das hab ich ja noch nie gemacht! Und so schon garnicht!
Hier ein Auszug aus einem Aktions-Skript in meinem System, das auch bei IPS-Version 5.3 funktioniert:
...
include_once "DefObjVis.inc.php"; /* [CONFIG\StrukturDefinitionen\DefObjVis] */
include_once "DefSemap.inc.php"; /* [CONFIG\StrukturDefinitionen\DefSemap] */
...
switch ($_IPS['SENDER']) { // woher aufgerufen ??
// ---- X. Skriptauslöser Beim Klicken eines Buttons
case "WebFront": /* Wenn das Skript durch das WebFront ausgeführt wurde
Systemvariable Bedeutung
$_IPS['INSTANCE'] ID der auslösenden WebServer Instanz
$_IPS['CONFIGURATOR'] ID des aktuell genutzten Konfigurators
$_IPS['VALUE'] Neuer Wert der Variable (integer)
$_IPS['VARIABLE'] ID der zu ändernden Variable
*/
...
Ich lege allerdings alle Skripte mit dem IPS-Editor an.
brausepaul hat da anscheinend irgendwie die Pfade „verbogen“ nach include_path=’.;C:\php\pear’
Weiß nicht, welche Vorteile das bringt.
Ich kann nur empfehlen eine „Plain-IPS-Struktur“ zu verwenden und es IPS zu überlassen wo die Skripte angelegt werden.
brausepaul hat da anscheinend irgendwie die Pfade „verbogen“ nach include_path=’.;C:\php\pear’
Hm, nein nicht wirklich. Ich habe da nichts verbogen, lediglich updates eingespielt. Das macht es ja schwierig, ich wüsste nicht mal wo ich an den Pfadangaben was drehen könnte.
Den include Pfad setzt Symcon selber beim Ausführen eines Script.
Und normalerweise sollte dort der Script Ordner enthalten sein.
Den Fehler, das dieser Include bei bestimmten Aktionen (Aufrufern) fehlt, hatten wir auch schon Mal.
Michael
17.12.2019, 19:21:12 | ScriptEngine | Result for Event 30091
<br />
<b>Warning</b>: Cannot auto-convert value for parameter VariableValue in <b>C:\Windows\System32\-</b> on line <b>2</b><br />
Edit: verweis auf anderen Fehler wieder entfernt, der war doch anders gelagert
Wo kann ich denn ggf. diesen falschen Pfad finden der seit dem Update gesetzt ist?
Er scheint ja die Scripte unter C:\Windows\System32\ zu suchen
17.12.2019, 19:35:00 | ScriptEngine | Result for Event 52403
<br />
<b>Warning</b>: include_once(Standard.ips.php): failed to open stream: No such file or directory in <b>C:\Windows\System32\-</b> on line <b>1</b><br />
<br />
<b>Warning</b>: include_once(): Failed opening 'Standard.ips.php' for inclusion (include_path='.;C:\php\pear') in <b>C:\Windows\System32\-</b> on line <b>1</b><br />
<br />
<b>Fatal error</b>: Uncaught Error: Call to undefined function get_currency() in C:\Windows\System32\-:2
Stack trace:
#0 {main}
thrown in <b>C:\Windows\System32\-</b> on line <b>2</b><br />
Nicht verwirren lassen. Das ist eine Default Fehlermeldung.
Du kannst den Pfad selber nicht konfigurieren. Das macht der Dienst selber.
Du kannst aber sehr wohl den aktuellen include abfragen und auch für das aktuelle Script setzen.
Das geht mit set_include_path() und get_include_path().
Michael
Der Ordner . (Punkt) ist das aktuelle WorkingDirectory und sollte der Script Ordner sein.
Egal ob es sich um ein Script im Ordner oder Code im Ereignis handelt sollte bei der magischen Konstante DIR der Script Order enthalten sein.
Michael
17.12.2019, 20:01:10 | ScriptEngine | Result for Event 43585
{„SENDER“:„TimerEvent“,„SELF“:0,„EVENT“:43585,„TARGET“:41317,„THREAD“:4}
5.2
C:\Windows\System32
.;C:\php\pear
Ich sehe da noch keinen Unterschied zur 5.3
Dennoch funktioniert auch bei mir unter 5.2 ein include auf eine Datei im Script Verzeichnis ohne Angabe des Pfades. Es funktioniert aber nicht unter 5.3.
Spannend ist, das es unter der 5.2 funktioniert haben soll. (War deine 5.2 up to date?) Denn wir haben seit langem nichts an PHP geändert. Nichtmal die PHP Version hat sich von der 5.2 auf die 5.3 geändert.
18.12.2019, 11:46:40 | ScriptEngine | Result for Event 43585
ich bin inkludiert.
---
{"SENDER":"TimerEvent","SELF":0,"EVENT":43585,"TARGET":41317,"THREAD":7}
5.2
beadf93761da5b5b269f5a4eecde882bdacbaa8c
7.3.8
C:\Windows\System32
.;C:\php\pear
Leider kann ich wenig dazu sagen auf welchem Stand IPS war als ich es am 30.11. upgedatet hatte. Das Datum weiß ich auch nur weil meine Variablen seit dem nicht mehr aktualisiert wurden. Erst jetzt hatte ich die Werte benötigt und bemerkt das mein Event-Code nicht mehr lauffähig ist.