Lauffähigkeit IPS-PHP und IIS7?

Hallo,
hat mal jemand versucht, das im IPS genutzte PHP per IIS7 (= MS-eigener Webserver, z.B. aus Vista heraus) anzusprechen? Und: dabei schon Erfolg gehabt?

Versuche ich die Standard-Vista-PHP-Installation (neues vollständiges PHP 5.2.10, frisch gezogen von PHP.NET, defaul-installiert unter C:\inetpub\php), geht alles bestens, aber natürlich keine PHP-Unterstützung für IPS-Befehle usw. Die Scriptzuordnung verweist dabei auf php5isapi.dll

Spreche ich dagegen die IPS-mitgelieferte PHP-DLL (php5ts.dll) per IIS-Handler-Zuordnung an, sagt mir der IIS brav und ausführlich, warum er jede Zusammenarbeit ablehnt: Die Benachrichtigung per SF_NOTIFY_READ_RAW_DATA kann nicht registriert werden. Der zugehörige KB-Artikel bei MS empfiehlt, doch bitte ein aktuelleres PHP-Modul zu verwenden. Womit er wohl sicher Recht hat.

Was tun? Aktualisierung geplant? Muß ich andere Dateien ins IPS-Verzeichnis reinkopieren? Welche Dateien? die php5isapi.dll der Vollinstallation? Aber stimmen die PHP-Versionen da überein? Etwas anderes als ISAPI, also CGI nehmen?

Ziel: Gleiche PHP-Scripts (innerhalb des IPS-Verzeichnisbaumes) sowohl vom IPS als auch IIS ansprechen zu können.

Danke für die kommenden Tips :slight_smile:
Gerd

Die Befehle stecken nicht in PHP. IP-Symcon erstellt einen Webserver, lässt den dann PHP laden und registriert sich in PHP als PHP-Modul. Die php5ts.dll ist in keinster Weise verändert worden. Einen anderen Webserver kann man leider auch nicht einfach in IP-Symcon integrieren. Wir hatten zwar mal über eine Abkopplung vom Webserver philosophiert, aber die Interprozesskommunikation würde dann zum Flaschenhals werden.

hmmm… Ich möchte einfach nur einige PHP-Scripts, die auch innerhalb vom IPS genutzt werden (dort noch nichtmal vom IPS-Webserver sondern prozesstechnisch), auch vom „externen“ Webserver her aufrufen.

Inhaltlich steht das mit Datenbank, Datamining, Reporting usw im Zusammenhang. IPS übernimmt da nicht die Rolle der Datenbasis, sondern ist eher mit der Verwaltungs- und Admin-Ebene vergleichbar inkl. Datenlieferung, aber alles per Datenbank. Flaschenhals ist also wirklich nicht das Problem, denn das extern aufgerufene Script sollte (wenn überhaupt) lediglich Statusinformationen lesen

Das klappt ja prinzipiell ganz gut, also das PHP-Script im IPS-Script-Verzeichnis läßt sich aufrufen, nur werden alle IPS-Befehle natürlich als Syntax-Fehler im Script erkannt.

Es wäre nur schade, wenn ich nun extra noch eine Schicht von Scripts „zwischenziehen“ müßte. Doppelt die Scripte halten für beide Nutzersysteme entfällt wegen Wartbarkeit.

Welche Version hat das intern in IPS genutzte PHP?

Gruß Gerd

Hallo Gerd,

23.07.2009 11:08:51.01 |     0 | MESSAGE | ScriptEngine         | Benutze PHP 5.1.6

Warum denkst Du nicht einmal in Richtung SOAP nach. Damit kannst Du alles aus IPS ziehen, egal an welchem Server Du sitzt. Geht unter PHP mit der passenden Extension (php_soap.dll) und sollte unter anderen Programmiersprachen (ASP,…) auch kein Problem darstellen, mußt halt nur eigene Seiten auf dem IIS basteln.

Nachtrag: Gerade gefunden, geht auch unter ASP.NET

Nur mal so als Gedankenanstoss.

Gute Idee, zumindest prinzipiell. Nur es gibt da schon sehr viel fertige Arbeit, ganze Systeme in PHP, die ein Reporting oder Dataminig machen usw. Und nicht alles ist IPS, ich hätte die nur aus IPS heraus auch gerne genutzt, z.B. um die IPS-Daten dort in die Datenbanken einfließen zu lassen oder Prozesse zur Auswertung zu starten und den Stand der Berechnungen aus IPS heraus lesen und darauf reagieren zu können. Kurz gesagt: Um die auch auf meine Haus-Daten anwenden zu können.

IPS ist hier aber sozusagen der Client bzw. EIN Client von mehreren. Und die Systeme sind (ohne SOAP zwischen IIS, dem anderen Client und der Datenbank zu nutzen) längst fertig.

Da jedes PHP5 schon einen SOAP-Client mitbringt, sollte es kein Problem, den Start der IPS-Scripte über eine Funktion im externen System zu kapseln, welche IPS_RunScript über SOAP aufruft.

Tommi

tut mir leid, aber das hilft in meinem Falle nichts:

  • ein Datenbanksystem existiert (>70GB Daten, ca. 400 Tabellen, ca. 800 Foreign Keys, großes komerzielles System entstanden über ca. 13 Jahre, diverse Clientanwendungen bei unterschiedlichsten Firmen im Einsatz OHNE SOAP)

  • ein PHP-basierendes System bzgl. Datamining existiert, arbeitet mit o.g. DB-System zusammen, entstanden in den letzten 5 Jahren in Hochschulkooperation u.a. in diversen Diplom- und Forschungsarbeiten und bei diversen Installationen des o.g. Systems im Einsatz. Es arbeitet OHNE SOAP, aber IIS-basierend und mit o.g. Datenbanksystem

  • und nun komme ich und will mal eben dieses System mit seinen DB-Tools mit meinem IPS verheiraten. Das IPS nun SOAP beherrscht (und prinzipiell auch die verwendeten Programmiersprachen) ist zwar nett, nutzt mir hier aber gar nix, da ich eben die vorhandene fertige Programmierleistung von mehreren Mann-Jahrzehnten nehmen und nutzen möchte, und eben gerade nicht nochmal alles neu erfinden will und kann (was bzgl. der dann zu erwartenden SW-Stabilität auch illusorisch wäre, jedenfalls als durch mich alleine innerhalb der nächsten Jahrzehnte zu realisieren). Außerdem stellt IPS in diesem Verbund eben ungewohnterweise mal NICHT die einzige zentralistische Komponente dar, sondern andere Module müssen nach wie vor natürlich weiter auch ohne IPS zusammen arbeiten können. Hier ist einmal IPS die Ergänzung :slight_smile:

Gesucht ist nach wie vor eine Lösung, fertige, PHP- und IIS-basierende Systeme, die ganz normal für sich genommen arbeiten (und auch keinen Anlaß haben, für sich genommen überarbeitet und auf SOAP-Nutzung umgestellt zu werden), parallel-nutzungstechnisch mit IPS kombinieren zu können.

Es ist noch nicht einmal irgendeine Schnittstelle gefragt, lediglich eine Möglichkeit, Scripts der gleichen Sprache auch vom jeweils anderen System heraus aufzurufen. Mehr nicht.

Wenn das nicht möglich ist, ist das einerseits traurig, andererseits bleibt mir dann nur noch der Weg, IPS mit einer „zwischengelagerten Schicht“ zu covern. Mangels gemeinsamer PHP-Script-Nutzung kann das dann leider nur über die Datenbank geschehen, sprich: alle Variablen die über reine Sensor-Stati hinausgehen werden künftig nicht mehr in IPS, sondern als Datenbank-Inhalte abgebildet.

Alle darauf wiederum triggernde Prozesse müssen dann eben per Datenbank bzw. durch die (ohnehin vorhandene) darüber liegende Prozess und Client-Welt der „großen“ Systeme übernommen werden. IPS würde somit aus sicht der intelligenteren „übergelagerten“ Systeme zum reinen Pre- bzw. Postprozessor der Sensor- und Bedienerdaten. Das kleine schlanke IPS in der Rolle der zentralen Administration, Sichtung und Prozessteuerung (als eine von mehreren, sozusagen die Haustechnik-kompatible Anwender-/Anwendungssteuerung) war hingegen eigentlich mein angestrebte Ziel. Naja, geht eben nicht alles.

Es gibt diverse fertige PHP-Skripte, die Dir anhand einer WSDL PHP-Klassen generieren, mit denen man dann die gegebenen SOAP-Funktionen bequem aufrufen kann. Web Services Framework for PHP by WSO2 : open source framework for providing and consuming Web services in PHP | WSO2 Oxygen Tank bietet einen Generator, ist aber Overkill, Google findet da schlankere Varianten unter „WSDL to PHP“.
Damit die Funktionen noch direkt verfügbar sind musst Du sie nur noch aus der Klasse umleiten. Mit einem require in jedem Skript dafür wirst Du denke ich noch leben können ;).
Ein fertiges Skript sieht dann ungefähr so aus:

<?php
    if (!function_exists("GetValue"))
    {
        require("KlasseMitIPSSoapFunktionen.php");
        
        $classMethods = get_class_methods("KlasseMitIPSSoapFunktionen");
        $toEval = "";
        foreach ($classMethods as $classMethod)
        {
            $toEval .= "function ".$classMethod."() { call_user_func_array('".$classMethod."', func_get_args()); }
";
        }
        eval($toEval);
    }
?>

Den ganzen eval-Inhalt könntest Du zur Performance-Steigerung dann natürlich auch noch direkt in eine PHP-Datei schreiben lassen und die per require aufrufen.

Aus Interesse: Was macht denn das anzubindende System eigentlich? Nutzerverhalten von Personen aufzeichnen und dynamisch gelernte Szenarien im Gebäude abrufen? Wenn es ein schönes Paper dazu gibt kannst Du ja mal den Titel nennen.

Hier noch ein Beitrag wie einfach du über SOAP die Brücke von deinem PHP/IIS Gespann zu IPS schlagen kannst:

Ich glaube du hast SOAP in die falsche Ecke einsortiert. SOAP ist nur ein Protokoll über das du Kommunizieren kannst. Dein IIS/PHP Applikation kann, wenn es nicht zufällig PHP4 verwendet, wunderbar über PHP auf SOAP und somit auf IPS zugreifen. Das einzige was sich für dich ändert ist der Befehl, der durch den SOAP Aufruf einen Tick länger ist.

paresy