Hat von Euch schon mal jemand ein Cookie für ein PHP Modul in IP-Symcon gespeichert? Was ist da das beste Vorgehen ein File, wenn ja wo speichere ich das ab, oder eine Property oder ein Buffer?
Und vor allem kann ich an CURLOPT_COOKIEFILE und CURLOPT_COOKIEJAR nur ein File übergeben oder kann das auch der Inhalt von einem IP-Symcon Buffer sein?
Gibt es denn so was wie ein tmp Verzeichnis für PHP Module in dem ich temporäre Dateien ablegen kann? Oder kann ich so ein Verzeichnis anlegen, wenn ja habe ich da die Rechte zu dies aus einem PHP Modul zu machen?
Mit CURL habe ich es noch nicht ausprobiert, aber wenn du den Inhalt der Datei hast, kannst du einen base64 String als Wrapper nutzen: PHP: data:// - Manual
Funktioniert zum Lesen wunderbar (nutze ich im Websocket Server für die Zertifikate).
Schreiben geht halt nicht.
Ansonsten:
File würde ich lassen.
MediaObject Typ Document, Property String als Base64 (über Action-Button in der Form ‚Cookie lesen‘ ) oder halt Buffer (non persistent bei reboot).
Buffer scheidet an sich aus da nicht persistent. Property bin ich mir nicht sicher ob es dann wieder Probleme mit Apply_Changes gibt. Bleibt also bevorzugt MediaObject, kann ich von einem MediaObject den beliebig erstellen und löschen? Der Inhalt ist dann ja wieder base_64, die Frage ist halt nur wie bekomme ich das als File an CURLOPT_COOKIEFILE übergeben, meinst Du das geht so wie oben mit file_get_contents?
HÄ ?
Wenn CURLOPT_COOKIEFILE ein File sein soll… warum liest du jetzt das ‚File‘ data:// selber mit file_get_contents aus Dann gibst du den Inhalt zurück… keine Datei.
Zuerst mal hast du kein Problem mit den Property wenn der Cookie NICHT im Applychanges angefragt und gespeichert wird; sondern der User dies über Script macht welches du in einem Action-Button der Instanz-Form hinterlegst.
$ichbineinedatei = 'data://text/plain;base64,'.$this->ReadPropertyString('Cookie');
curl_setopt($ch, CURLOPT_COOKIEFILE, $ichbineinedatei); // Keine Ahnung ob die CURL Erweiterung mit data-Wrappern zurecht kommt !
Deine Lösung, wie du auch an den Cookie kommst OHNE eine Datei zum schreiben zu nutzen, ist hier:
// 1)Don't use CURLOPT_FOLLOWLOCATION
// 2)
curl_setopt($ch, CURLOPT_HEADER, true);
// 3) Grab from the header cookies like this:
preg_match_all('|Set-Cookie: (.*);|U', $content, $results);
$cookies = implode(';', $results[1]);
// 4)Set them using
curl_setopt($ch, CURLOPT_COOKIE, $cookies);
Ich glaube, ich muss nochmal den refresh Timer verküzen, denn nach 24 Stunden war der Socket zu und man musste sich den Token neu holen… war mir aber jetzt nicht ganz so wichtig, da bei nello auch mit MQTT gearbeitet wird und ich mich noch nicht darum gekümmert habe. Somit ist das Modul noch nicht komplett vollständig.
Warum ? Na darum halt…
Eine Fehlerquelle mehr, egal was du machst. Ob es eventuell Probleme mit Berechtigung oder Speicherplatz oder sonst was sind.
Ich würde im Modul immer alles irgendwo in IPS bzw. in dessen Zuständig belassen.
Sogar zusätzliche Scripte welche ich zu Anfang in den Modulen hatte (Webhook oder Config ) habe ich entfernt und durch andere Mechanismen ersetzt.