+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Php 7.4

  1. #1
    Registriert seit
    Mar 2018
    Beiträge
    58

    Standard Php 7.4

    Moin zusammen,

    habe im TelegramMessenger Modul das Problem, dass dies wohl mit der alten PHP Version geschrieben wurde und nun spuckt er den Fehler aus:

    <b>Notice</b>: Trying to access array offset on value of type bool in <b>/var/lib/symcon/modules/jmc-symcon-modules/TelegramMessenger/module.php</b> on line <b>62</b><br />
    <br />

    Ich bin jetzt kein Profiprogrammierer und stoße hier an meine Grenzen, denn wie ich es auch mache, schmeißt er mit Fehler raus.

    Das Problem liegt in der FETT geschriebenen Zeile:

    public function SendImage($text, $image_path, $userid) {
    include_once(__DIR__ . "/Telegram.php");
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
    $img_info = getimagesize($image_path);
    $mime = $img_info['mime'];
    if ($mime == "image/jpeg" or $mime == "image/jpg") [
    $ext = ".jpg";
    ] else if ($mime == "image/png") [
    $ext = ".png";
    ] else if ($mime == "image/gif") [
    $ext = ".gif";
    ] else [
    return false;
    ]
    $img = curl_file_create($image_path, $mime , md5($image_path.time()).$ext);
    $content = array('chat_id' => $userid, 'caption' => $text, 'photo' => $img);
    return $telegram->sendPhoto($content);
    }

    Wäre nett, wenn mir hier kurz einer helfen könnte.
    IP-Symcon 5.5 Raspi4 - WAGO SPS 750-881 - Amazon Echo´s - ConBee2 ZigBee Stick, HomematicIP mit CCU2 - Visu über IPSView 4.2 - DS220+

  2. #2
    Registriert seit
    Mar 2008
    Ort
    Ruesselsheim
    Beiträge
    3,995

    Hallo
    Ich wuerde vor die Fehlerzeile mal mir ausgeben was in $img_info steht.
    PHP-Code:
    print_r($img_info); 
    Es gibt auch noch ein Arrayfeld wo der Typ als Zahl drin steht. ( 2 = jpg )

  3. #3
    Registriert seit
    Mar 2018
    Beiträge
    58

    Frage mich grad, wie ich printr ausgeben soll, es handelt sich ja um die modul.php und die gibt nur aus, wenn ich einen Telegramm Befehl sende. Müsste wenn dann das Ergebnis vermutlich in eine Datei bzw. Variable schreiben?
    Es lief ja vor der php umstellung reibungslos.
    IP-Symcon 5.5 Raspi4 - WAGO SPS 750-881 - Amazon Echo´s - ConBee2 ZigBee Stick, HomematicIP mit CCU2 - Visu über IPSView 4.2 - DS220+

  4. #4
    Registriert seit
    Mar 2018
    Beiträge
    58

    hier mal die komplette Modul.php:

    PHP-Code:
    <?
        
    // Klassendefinition
        
    class TelegramMessenger extends IPSModule {
     
            public function 
    __construct($InstanceID) {
                
    // Diese Zeile nicht löschen
                
    parent::__construct($InstanceID);
            }
     
            
    // Überschreibt die interne IPS_Create($id) Funktion
            
    public function Create() {
                
    parent::Create();                       
                
    $this->RegisterPropertyString("BotID""123456789:JHJ56HJJHJ78778JKLKJKLJ8798JHJahjhw");
                
    $this->RegisterPropertyString("Recipients""123456789,987654321");   
                
    $this->RegisterPropertyBoolean("FetchIncoming"true);
                
    $this->RegisterPropertyBoolean("ProcessIncoming"false);
                
    $this->RegisterPropertyInteger ("ProcessIncomingSkript"0);
                
    $this->RegisterPropertyBoolean("HTML"false);
                
    $this->RegisterTimer("GetUpdates"15000'Telegram_GetUpdates($_IPS[\'TARGET\']);');
            }
            
            
            
    // Überschreibt die intere IPS_ApplyChanges($id) Funktion
            
    public function ApplyChanges() {
                
    // Diese Zeile nicht löschen
                
    parent::ApplyChanges();

            }
     
            
    /**
            * Die folgenden Funktionen stehen automatisch zur Verfügung, wenn das Modul über die "Module Control" eingefügt wurden.
            * Die Funktionen werden, mit dem selbst eingerichteten Prefix, in PHP und JSON-RPC wiefolgt zur Verfügung gestellt:
            *
            * ABC_MeineErsteEigeneFunktion($id);
            *
            */
            
            
    public function SendTextToAll($text) {
                
    $recips explode(",",$this->ReadPropertyString("Recipients"));
                
    $retVal true;
                foreach(
    $recips as $r) {
                    
    $retVal &= $this->SendText($text$r);
                }
                return 
    $retVal;
            }
            
            public function 
    SendText($text$userid) {
                include_once(
    __DIR__ "/Telegram.php");
                
    $frmt "Markdown";
                if (
    $this->ReadPropertyBoolean("HTML") == true) {
                    
    $frmt "HTML";
                }
                
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                
    $content = array('chat_id' => $userid'text' => $text'parse_mode' => $frmt);
                return 
    $telegram->sendMessage($content);
            }
            
            public function 
    SendImage($text$image_path$userid) {
                include_once(
    __DIR__ "/Telegram.php");
                
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                
    $img_info getimagesize($image_path);
                
    $mime $img_info['mime'];
                if (
    $mime == "image/jpeg" or $mime == "image/jpg") {
                    
    $ext ".jpg";
                } else if (
    $mime == "image/png") {
                    
    $ext ".png";
                } else if (
    $mime == "image/gif") {
                    
    $ext ".gif";
                } else {
                    return 
    false;
                }
                
    $img curl_file_create($image_path$mime md5($image_path.time()).$ext);
                
    $content = array('chat_id' => $userid'caption' => $text'photo' => $img);
                return 
    $telegram->sendPhoto($content);
            }
            
            public function 
    SendImageToAll($text$image_path) {
                include_once(
    __DIR__ "/Telegram.php");
                
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                
    $recips explode(",",$this->ReadPropertyString("Recipients"));
                
    $retVal true;
                foreach(
    $recips as $r) {
                    
    $retVal &= $this->SendImage($text$image_path$r);
                }
                return 
    $retVal;
            }
            
            public function 
    SendDocument($text$document_path$mimetype$userid) {
                include_once(
    __DIR__ "/Telegram.php");
                
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                
    $ext pathinfo($document_path);
                
    $doc curl_file_create($document_path$mimetype md5($document_path.time()).".".$ext['extension']);
                
    $content = array('chat_id' => $userid'caption' => $text'document' => $doc);
                return 
    $telegram->sendDocument($content);
            }
            
            public function 
    SendDocumentToAll($text$document_path$mimetype) {
                include_once(
    __DIR__ "/Telegram.php");
                
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                
    $recips explode(",",$this->ReadPropertyString("Recipients"));
                
    $retVal true;
                foreach(
    $recips as $r) {
                    
    $retVal &= $this->SendDocument($text$document_path$mimetype$r);
                }
                return 
    $retVal;
            }
            
            public function 
    GetUpdates() {
                if (
    $this->ReadPropertyBoolean("FetchIncoming")) {
                    include_once(
    __DIR__ "/Telegram.php");
                    
    $telegram = new Telegram($this->ReadPropertyString("BotID"));
                    
    $req $telegram->getUpdates();

                    for (
    $i 0$i $telegram->UpdateCount(); $i++) {
                        
    // You NEED to call serveUpdate before accessing the values of message in Telegram Class
                        
    $telegram->serveUpdate($i);
                        
    $text $telegram->Text();
                        
    $chat_id $telegram->ChatID();
                        
    $date $telegram->Date();
                        
    IPS_LogMessage("Telegram""Update von " $chat_id " -> " $text " / " $date " / " print_r($telegram,true));
                        
    // Verarbeiten von Nachrichten (aber nur wenn aktiviert und Nachricht nicht älter als 1 Minute);
                        
    if ($this->ReadPropertyBoolean("ProcessIncoming") && (time() - $date) < 60) {
                            
    // Ist der User bekannt?
                            
    $recips explode(",",$this->ReadPropertyString("Recipients"));
                            foreach(
    $recips as $r) {
                                if (
    $r == $chat_id) {
                                    
    IPS_RunScriptEx(
                                        
    $this->ReadPropertyInteger("ProcessIncomingSkript"),
                                        array(
    "SENDER" => "Telegram""INSTANCE" => $this->InstanceID"CHAT" => $chat_id"VALUE" => $text)
                                    );
                                    break;
                                }
                            }                        
                        }
                    }
                }
            }
        }
    ?>
    IP-Symcon 5.5 Raspi4 - WAGO SPS 750-881 - Amazon Echo´s - ConBee2 ZigBee Stick, HomematicIP mit CCU2 - Visu über IPSView 4.2 - DS220+

  5. #5
    Registriert seit
    Oct 2010
    Ort
    Paderborn
    Beiträge
    2,970

    Du könntest dir mit $this->SendDebug() etwas ins Debuglog schreiben.

    z.B.
    PHP-Code:
    $this->SendDebug(__FUNCTION__json_encode($image_info), 0); 
    Ich vermute, dass die Funktion getimagesize() mit false zurückkommt und daher die nachfolgende Anweisung Probleme macht. PHP 7 ist da nun kritischer und macht dich darauf aufmerksam ("Notice").
    Zum Abbruch kommt es aber nicht dabei.

    Burkhard
    HM per RaspberryMatic | EKM-868 | LGS-868 | 1 Wire | Fibaro Motion Sensor & Aeon Labs Z-Stick S2 | SONOS | Denon AVR 3312 | Vu+ Ultimo 4K | Sony KD-75XE9405 | Fritzbox 6360 | Hikvision DS-2CD2686G2-IZS | Echo Dot + Show | Stall.biz AirSniffer | Vaillant eBUS | Intel NUC i3 | IPS V5.5 Beta

  6. #6
    Registriert seit
    Mar 2018
    Beiträge
    58

    es ist tatsächlich so, dass er mir nachdem ich die Zeile von bumaas eingefügt habe im Debuglog false ausspuckt.

    Kann ich das definieren, dass er die Befehle trotzdem weiter ausführt und mir mein Bild entsprechend zuschickt?

    Wenn ich nur den Befehlt SendText nehme, funktioniert alles problemlos
    IP-Symcon 5.5 Raspi4 - WAGO SPS 750-881 - Amazon Echo´s - ConBee2 ZigBee Stick, HomematicIP mit CCU2 - Visu über IPSView 4.2 - DS220+

  7. #7
    Registriert seit
    Mar 2018
    Beiträge
    58

    Hab das Problem gelöst.

    Das Problem war nicht das Modul, sondern die falsche Camauswahl.

    Jedoch bin ich der Meinung, dass man das mit der Änderung von PHP7.4 bestimmt noch ändern sollte, dann gibts auch keine Fehlermeldung
    IP-Symcon 5.5 Raspi4 - WAGO SPS 750-881 - Amazon Echo´s - ConBee2 ZigBee Stick, HomematicIP mit CCU2 - Visu über IPSView 4.2 - DS220+

Ähnliche Themen

  1. PHP 5.6 verbraucht mehr Speicher als PHP 5.4
    Von T30 im Forum Allgemeine Diskussion
    Antworten: 5
    Letzter Beitrag: 07.11.16, 16:55
  2. PHP per PHP-Befehl ausführen?
    Von hardlog im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 12.03.16, 09:08
  3. PHP Extension "php-snmp.dll" wird nicht installiert
    Von PWC im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 16
    Letzter Beitrag: 30.01.15, 21:58