Ankündigung

Einklappen
Keine Ankündigung bisher.

passthru auf Linux - Zeilenlängen der Rückgabe

Einklappen

Neue Werbung 2019

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

  • passthru auf Linux - Zeilenlängen der Rückgabe

    Hallo zusammen,

    Habe mich neu hier angemeldet und bitte um Nachsicht, wenn ich nicht auf Anhieb alle Forenregeln oder -sitten beachte - bin aber lernfähig, ein freundlicher Hinweis genügt meist.

    Zur Zeit habe ich ein kleines Problem und weiss nicht, wonach ich für die Lösungsfindung suchen muss:

    Auf einer QNAP-TS220 (ein NAS, PHP Version 5.3.26 - Linux 2.6.33.2, armv5tel) führe ich über Apache/Webbrowser

    test.php
    PHP-Code:
    $cmd "ps";
    echo 
    "<pre>";
    passthru($cmd);
    echo 
    "</pre>"
    aus und erhalte (Ausschnitt)

    Code:
    4014 admin      1364 S   /usr/local/samba/sbin/smbd -l /var/log -D -s /etc/con
    4024 admin       584 S   /usr/local/samba/sbin/smbd -l /var/log -D -s /etc/con
    4052 admin      1036 S < /usr/local/apache/bin/apache_proxy -k start -f /etc/a
    Man beachte die abgeschnittenen Zeilen (80 Zeichen).

    Ein
    Code:
    $cmd = "stty cols 150 \n ps";
    ändert nichts an der Ausgabe.

    Wo muss ich ansetzen, um das zu lösen? Auf der Konsole am NAS habe ich keine Probleme damit, die Zeilenlänge zu ändern, auch eine Ausführung per CLI-Aufruf führt zum gewünschten Ergebnis.

    Besten Dank.

    Fe-X

  • #2
    haste schonmal $out mit übergeben (also eine variablen für den output)?
    oder mal putenv() versucht?

    Kommentar


    • #3
      Zitat von moma Beitrag anzeigen
      haste schonmal $out mit übergeben (also eine variablen für den output)?
      passthru($cmd, $out) liefert 0 zurück. Oder meintest du etwas anderes?
      oder mal putenv() versucht?
      Keine Veränderung mit eingefügtem
      PHP-Code:
      putenv("COLUMNS=140"); 
      . Ich steh etwas auf dem Schlauch und bin auch nicht (mehr) sicher, welche Variable ich für die Länge der Zeichenausgabe setzen muss...

      Danke und Grüsse

      Fe-X

      Kommentar


      • #4
        dachte passthru haut in ein eigenes tty.
        so geht es sicher auch nicht
        http://www.php.net/manual/de/function.proc-open.php

        Kommentar


        • #5
          Zitat von moma Beitrag anzeigen
          dachte passthru haut in ein eigenes tty.
          Offenbar, ja.

          Interessant ist einfach, dass ich über das Apache-Modul mit
          PHP-Code:
          $cmd "env";
              echo 
          "<pre>";
              
          passthru($cmd$out);
              echo 
          "</pre>"
          Code:
          SHELL=/bin/sh
          TERM=vt102
          ramdisk=34816
          USER=root
          QBOOT_HDCONF=1
          PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin
          _=/usr/bin/env
          PWD=/share/HDA_DATA/Web
          SHLVL=9
          HOME=/
          erhalte und über die CLI unter anderem
          Code:
          TERM=xterm
          Wäre interessant zu wissen, ob und wie man dieses Verhalten beeinflussen kann. Ein vorangefügtes
          PHP-Code:
          putenv("TERM=xterm"); 
          ändert nichts.

          ?

          Kommentar


          • #6
            Ich kann das alles leider nicht testen, mir schien jedoch dass:

            -eine umlenken der tty (STDIN & STDOUT) auf ne pipe sinnvoll sein könnte.
            -das ausführen meherer cmds hintereinader dadurch explizit ermöglicht wird
            -env hier als argument angeboten wird.

            Kommentar


            • #7
              ich glaube du unterliegst hier einem Trugschluss - die Änderung der Anzeige auf der Konsole des NAS hat nix - aber auch gar nix - zu tun mit dem HTML-Code, der zum Browser gesendet wird

              <pre> sorgt für eine bestimmte Formatierung der nachfolgenden Ausgaben - und wie viele Text-Zeichen dann pro Zeile dargestellt werden, hängt allein von 2 "Sachen" ab:

              Größe des Browser-Fensters
              Größe des Elements, in dem die Ausgabe erfolgt.
              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                ich glaube du unterliegst hier einem Trugschluss - die Änderung der Anzeige auf der Konsole des NAS hat nix - aber auch gar nix - zu tun mit dem HTML-Code, der zum Browser gesendet wird

                <pre> sorgt für eine bestimmte Formatierung der nachfolgenden Ausgaben - und wie viele Text-Zeichen dann pro Zeile dargestellt werden, hängt allein von 2 "Sachen" ab:

                Größe des Browser-Fensters
                Größe des Elements, in dem die Ausgabe erfolgt.
                ?
                Ich kann dir nicht folgen. Das <pre> ist nirgends eingebettet und das Fenster des Clients weit breiter als die zurückgegebenen 80 Zeichen. (Wir unterhalten uns hier unter "Fortgeschrittene" und der Quellcode ist 1:1 abgedruckt.)

                Entweder du liegst weit daneben oder ich habe dich überhaupt nicht verstanden.

                Grüsse

                Fe-X

                Kommentar


                • #9
                  PHP-Code:
                  <?php
                      error_reporting
                  (E_ALL);
                      
                  ini_set("display_errors"1);
                      
                  $cmd "ps";
                      
                      
                  $descriptorspec = array(
                     
                  => array("pipe""r"),  // STDIN ist eine Pipe, von der das Child liest
                     
                  => array("pipe""w"),  // STDOUT ist eine Pipe, in die das Child schreibt
                     
                  => array("file""/tmp/error-output.txt""a"// STDERR ist eine Datei,
                                                                      // in die geschrieben wird
                      
                  );

                      
                  $cwd '/tmp';
                      
                  $env = array('TERM' => 'xterm',
                                   
                  'COLUMNS' => '140',
                                   
                  'TERMINFO' => '/opt/share/terminfo',
                                   
                  'SHELL' => '/bin/sh'
                                   
                  'HISTSIZE' => '1000'
                                   
                  'LC_ALL' => 'en_US.UTF-8'
                                   
                  'HISTFILESIZE' => '1000'
                                   
                  'PATH' => '/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin'
                                   
                  'INPUTRC' => '/etc/inputrc' 
                                  
                  );

                      
                  $process proc_open($cmd$descriptorspec$pipes$cwd$env);
                     
                      if (
                  is_resource($process)) {

                          
                  fwrite($pipes[0], '<?php print_r($_ENV); ?>');
                          
                  fclose($pipes[0]);
                          
                          echo 
                  "<pre>";
                          echo 
                  stream_get_contents($pipes[1]);
                          
                  fclose($pipes[1]);

                          
                  $return_value proc_close($process);

                          echo 
                  "Rückgabewert des Kommandos: $return_value\n";
                          echo 
                  "</pre>";
                      }
                  ?>
                  Selbes Resultat: 80 Zeichen/Zeile und kein einziges mehr.
                  Nun auch auf der CLI per
                  Code:
                  php test.php
                  dasselbe: Abgeschnittene Zeilen

                  Wer pfuscht hier ins Handwerk? php? Falsche config? Falsche Parameter beim Kompilieren?
                  Oder macht die Linux-Konfiguration Ärger?

                  Danke für's Mitdenken.

                  Fe-X

                  Kommentar


                  • #10
                    so dann ich nochmal - hast du das ganze statt mit passthru mal mit exec versucht? - da dann natürlich den 2ten Parameter (das Array) für die Ausgabe verwenden, der direkte Rückgabewert ist ja nur die letzte Zeile der Ausgabe

                    Wobei ich bei mir - mangels NAS teste ich es auf nem Lubuntu 14 - mit beiden zum Erfolg komme.

                    Mich wundert allerdings deine Ausgabe zu "env", wenn du es über den Webserver laufen lässt - bei mir stehen da dann verschiedene Apache-Variablen in der Ausgabe und kein Terminal wie bei dir
                    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                    Kommentar


                    • #11
                      stty command chain ?!
                      [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


                      • #12
                        Zitat von tr0y Beitrag anzeigen
                        stty command chain ?!
                        geschäzter tr0y, ich hab dazu nicht brauchbares im netz gefunden, was meinste damit?

                        @TE:
                        hat sich bei dir was neues ergeben?

                        zu dem code:

                        +mit deinem env komm ich nicht klar:
                        - mir scheinen alle deffinitionen unnötig.
                        - wieso xterm als term, nen vt102(-w) wäre ja zum testen auch gut gewesen.

                        +descriptorspec:
                        wieso denn pipes zur eingabe und ausgabe, minn doch mal "normale" dateien

                        ich kann dein problem nicht nachstellen, würde aber mal apche im debug modus laufen lassen.

                        Kommentar


                        • #13
                          Code:
                          stty columns 120 && php /var/somewhere/pups.php
                          sag mir jetzt nicht du weißt nicht was ein command chain ist ?
                          [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


                          • #14
                            Zitat von tr0y Beitrag anzeigen
                            Code:
                            stty columns 120 && php /var/somewhere/pups.php
                            sag mir jetzt nicht du weißt nicht was ein command chain ist ?
                            den begriff kannte ich nicht; begriffe kenne ich scheinbar häufig nicht

                            wird bei ner chain verkettung (// OT: muss denglisch doppel sein gluab ich) das zweite glied immer im abhängigkeit vom ersten ausgeführt, oder ist das nen sonderfall?

                            Kommentar


                            • #15
                              Zitat von moma Beitrag anzeigen
                              den begriff kannte ich nicht; begriffe kenne ich scheinbar häufig nicht

                              wird bei ner chain verkettung (// OT: muss denglisch doppel sein gluab ich) das zweite glied immer im abhängigkeit vom ersten ausgeführt, oder ist das nen sonderfall?
                              Das && ist ein ganz normales AND unter Bash/SH/KSH/... und wird auch so ausgewertet. Ist der erste Aufruf TRUE (Exit-Code 0) wird auch der zweite Befehl ausgeführt, ist der erste FALSE (Exit-Code <>0) wird der zweite erst garnicht mehr ausgeführt da FALSE rauskommen würde, ganz gleich was der zweite bringt.
                              [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                              Kommentar

                              Lädt...
                              X