Ankündigung

Einklappen
Keine Ankündigung bisher.

funktion für stream_get_contents

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • funktion für stream_get_contents

    guten morgen
    neuer morgen, neue sorgen ^^

    jetzt suche ich eine funktion ergänzend zur stream_get_contents.

    der fall sieht wie folgt aus:

    ich steuere über mein script 4 öfen, 2 können direkt per ethernet-schnittstelle mit dem netzwerk verbunden werden, die anderen 2 jedoch werden über eine serielle schnittstelle, die durch einen RaspberryPi ans Netzwerk angeschossen sind, angesteuert.
    Problem ist, bei den Pi's kommen als erste zeichen wenn ich auslesen will, irgennt ein datenmüll, obs vom Pi oder ser2net fabriziert wird, weiß ich nicht, aber es sorgt dafür das der string den ich gesendet bekomme so normal mit stream_get_contents () nicht brauchbar ist.
    ich suche also eine funktion die so gesehen wartet bis das erste zeichen eine 0 oder ein - ist. suche schon seit stunden und finde nichts


  • #2
    Habe mit stream_get_contents noch nicht gearbeitet, aber lt. Manual müsstest Du das Ergebnis doch einfach nur grundlegend analysieren:
    PHP-Code:
    $sStreamResult stream_get_contents$res );
    $sStreamResult substr$sStreamResultstrpos($sStreamResult'0') ); 
    ...für das - muß das dann evtl. noch sinnvoll erweitert werden, aber prinzipiell sollte das doch gehen, wenn ich Dich richtig verstanden habe?!


    Für mehrere mögliche Anfangszeichen machste Dir eine Funktion, ähnlich der hier:
    PHP-Code:
    function strBeginByChars$sString$aChars ) {
        
        
    $iCharPos null;
        
        if ( 
    is_array($aChars) ) {
            
            foreach( 
    $aChars as $key=>$value ) {
                
                
    $aChars[$key] = strpos$sString$value );

            }

            
    sort$aChars );
            
    $aChars array_filterarray_reverse($aChars) );
            
    $iCharPos = (integer)end$aChars );

        }

        return 
    substr$sString$iCharPos );


    dann kannste den Stream im Code selbst ganz einfach "säubern":
    PHP-Code:
    $sStreamResult strBeginByCharsstream_get_contents($res), array('0''-') ); 
    ...für weitere mögliche Zeichen musst Du dann nur noch das Array erweitern.

    Allerdings gebe ich jspit recht, versuche lieber den Datenmüll von vornherein zu verhindern!,
    denn wenn der "Datenmüll" bspw. eines der zulässigen Zeichen enthält, stehst Du wieder vor einem Problem...
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Zitat von Gabbanerd Beitrag anzeigen
      Problem ist, bei den Pi's kommen als erste zeichen wenn ich auslesen will, irgennt ein datenmüll, obs vom Pi oder ser2net fabriziert wird, weiß ich nicht, aber es sorgt dafür ..
      Mein Rat:
      Beseitige das Problem an der Wurzel und finde heraus, warum Datenmüll produziert wird. Die Probleme durch Softwaretricks beseitigen zu wollen gleicht ein Kampf gegen Windmühlen a.la. Don Quijote.

      Edit:
      Vom Grundsatz wenn definierte Zeichen gefiltert werden sollen -> stream_filter Funktionen.
      Warum sich erst mit Müll den Speicher zuknallen?
      PHP-Klassen auf github

      Kommentar


      • #4
        klar datenmüll verhindern steht an erster stelle, das komische ist ja, es besteht bereits ein ähnliches python script bei dem der müll nicht gesendet wird es ist auch nicht bekannt wodurch der datenmüll zustande kommt, aber er sieht immer gleich aus

        Code:
        ÿûÿûÿþÿý

        Kommentar


        • #5
          Ach so, es kommt erst Datenmüll und erst im nächsten Stream das, was Du willst?
          PHP-Code:
          do {

              
          $sStreamResult stream_get_contents$res );
              
          $bIsValid in_array(
                      
          substr$sStreamResult0),
                      array( 
          '0''-' );
                  );

          } while( !
          $bIsValid ); 
          ...kann natürlich auch zur Endlosschleife werden. Wie gesagt, habe stream_get_contents() bisher nie genutzt und biete das daher nur als Idee an
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Encoding ole.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Zitat von Arne Drews Beitrag anzeigen
              Ach so, es kommt erst Datenmüll und erst im nächsten Stream das, was Du willst?
              PHP-Code:
              do {

                  
              $sStreamResult stream_get_contents$res );
                  
              $bIsValid in_array(
                          
              substr$sStreamResult0),
                          array( 
              '0''-' );
                      );

              } while( !
              $bIsValid ); 
              ...kann natürlich auch zur Endlosschleife werden. Wie gesagt, habe stream_get_contents() bisher nie genutzt und biete das daher nur als Idee an
              um deinem rätselraten mal ein ende zu bereiten zeige ich einfach mal den code der funktion und das was rauskommt

              PHP-Code:
              function readOven($IP$debug, &$errormsg){
                  if(
              $debug===1){
                      echo 
              "readOven IP: $IP <br>";
                  }
                  
              $con=@fsockopen($IP2049$errno$errstr);
                  if(
              $con){
                      @
              fputs($con"\$01I\r");
                      
              $stream=stream_get_contents($con,131,0);
                      if(
              $debug===1){echo "debug readOven: $stream <br>";}
                      
              fclose($con);
                  }else{
                      if(
              $errno==0){
                          
              $errormsg="<tr><td colspan=4 align=\"center\"><font size=4 color=\"red\">Cannot connect to Oven<br>Name or IP not known</font></td></tr>";
                      }
                      
              $stream="false";
                  }
                  return 
              $stream;

              das ist die funktion und das ist was bei den öfen die vom PI zwischengesteuert wird rauskommt

              Code:
              ÿûÿûÿþÿý0000.0 0025.1 0000.0 0000.0 0100.0 0100.0 0000.0 0000.0 0000.0 0000.0 0000.0 0000.0 0000.0 0000.0 000100000100000000000

              Kommentar


              • #8
                Zitat von tr0y Beitrag anzeigen
                Encoding ole.
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  Zitat von tr0y Beitrag anzeigen
                  hilft einem auch weiter ........

                  Kommentar


                  • #10
                    Dein Stream hat ein schräges ( nicht dem aktuellen PHP Encoding entsprechendes ) Encoding, das musst du beheben, dann ist alles gut. Zumindest aus logischer Sicht.

                    Du kannst den Verbindungspool auch sharken um festzustellen ob du da mist bekommst oder ob ein ip-gateway oder spooler das fabriziert.
                    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                    Kommentar


                    • #11
                      mein stream ist ein string aus aneinandergereiten fload werten .... hab es nun auf eine ganz simple weise gelöst

                      PHP-Code:
                      function readOven($IP$debug, &$errormsg){
                          if(
                      $debug===1){
                              echo 
                      "readOven IP: $IP <br>";
                          }
                          
                      $con=@fsockopen($IP2049$errno$errstr);
                          if(
                      $con){
                              @
                      fputs($con"\$01I\r");
                              if(
                      $IP=="de-oven-03"){
                                  
                      $stream=stream_get_contents($con,131,12);
                              }
                              else if(
                      $IP=="de-oven-04"){
                                  
                      $stream=stream_get_contents($con,131,12);
                              }
                              else{
                                  
                      $stream=stream_get_contents($con,131,0);
                              }
                              if(
                      $debug===1){echo "debug readOven: $stream <br>";}
                              
                      fclose($con);
                          }else{
                              if(
                      $errno==0){
                                  
                      $errormsg="<tr><td colspan=4 align=\"center\"><font size=4 color=\"red\">Cannot connect to Oven<br>Name or IP not known</font></td></tr>";
                              }
                              
                      $stream="false";
                          }
                          return 
                      $stream;

                      habe einfach festgestellt wieviele zeichen der müll hat und sag stream_get_contents() einfach das er nach dem müll anfangen soll den stream zu speichern
                      vielleicht nicht die eleganteste methode aber wirkungsvoll

                      Kommentar


                      • #12
                        Ich denke, daß tr0y recht hat.
                        Dennoch hast Du #2 nicht getestet, denn genau das bräuchtest Du hier...
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Deine funktion habe ich getestet auch besten dank dafür das du dir gedanken gemacht hast, nur leider war sie nicht von erfolg gekrönt

                          Kommentar


                          • #14
                            Bekämpfe keine Symptome sondern Ursachen.
                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              Das hat nix mit dem Encoding zu tun, das sind Steuerkomandos von Telnet. http://mud-dev.wikidot.com/telnet:negotiation

                              Kommentar

                              Lädt...
                              X