Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Konsolenbefehl einlesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Konsolenbefehl einlesen

    Hallo zusammen,

    ich wollte gerne die Ausgabe eines Konsolenbefehls einlesen. Den Befehl füre ich über shell_exec() aus. Die Ausgabe auf der Konsole sieht in etwa so aus:

    /dev/xx busy
    /dev/xx free
    ...

    JID User Status
    2 Blub blab
    12 Blib blob
    Mit den HTML Tags
    PHP-Code:
    <pre></pre
    kann ich den die Konsolenausgabe richtig formatiert ausgeben. Ohne diesen Tag würden die Zeilen und Leerzeichen in einem zusammenhängenden Block geschrieben. Nun sind aber die /dev/xx Zeilen im Weg. Diese umgehe ich damit, dass ich nach den String "/n" suche und Ihnen durch <br/> ersetzen. Die einzelnen Zeilen gebe ich dann aus wobei ich erst bei der Zeile x anfange. Soweit so gut nun habe ich schonmal die Liste mit Titeln. Nur sind die Job-IDs (JID) nicht sortiert, es werden alle Absender gezeigt, alle fehlgeschlagene Faxe werden auch angezeigt nun möchte ich gerne die einzelnen Spalten haben. Problem ist das diese mit Leerzeichen getrent werden. Ein Leerzeichen suchen und ersetzen klappt nicht. Wie kann ich nun die Spalten trennen sodass ich dann eien Variable (Array) mit Zeilennummer als Index und JID usw. als variablen in der 2ten Ebene habe z.B. $ausgabe[13][JID] wäre dann 22 und $ausgabe[13][Status] wäre z.B. No Signal of EOP. So das man die Möglichkeit at auch Jobs abzubrechen.

    Es geht hierbei um eine 0815 Weboberfläche für Hylafax damit man pdfs faxen kann da für windows 7 keine vernünftigen kostenlose clients vorhanden sind. Jedenfalls kenne ich kein vernünftiges .

    Liebe Grüße

    BJ01090

  • #2
    Sorry, aber der Text ist soooooooo unverständlich ( meiner Meinung nach ).
    Ein Beispiel wäre nicht schlecht !?
    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

    Kommentar


    • #3
      Entschuldigung ich versuche es nochmal. Also in der Konsole gebe ich einen Befehl ein um die vergangenen Jobs von Hylafax zu bekommen. Die Ausgabe in der Konsole sieht so aus:

      /dev/xxx busy
      /dev/xxx free

      JID Benutzer Status
      12 test1
      2 tes2 No response on EOP
      Die Ausgabe des Befehls bekomme ich durch

      PHP-Code:
      shell_exec(); 
      Auf der Seite (Im Browser) steht dann folgendes:

      JID Benutzer Status 12 tes1 2 tes2 No response on EOP
      Also alles in einem Block. Mit dem HTML Tag

      Code:
      <pre></pre>
      Damit sieht das schon so aus wie auf der Konsole. Nun stören die "/dev/xxx xxx" ausgaben. Ich muss also die Ausgabe irgendwie zeilenweise einlesen. Dies erreiche ich dadurch, dass ich die Ausgabe mit

      PHP-Code:
      explode("\n"$output); 
      in den Zeilen aufsplitte. Nun kann ich sagen, dass die Ausgabe erst ab Zeile xy startet also ab der zeile mit JID Benutzer Status... (mit einer for Schleife und dem count-Befehl für die Anzahl der Zeilen). Mit den HTML-Tag

      Code:
      <pre></pre>
      habe ich nun die Liste im Browser so stehen.

      JID Benutzer Status
      12 test1
      2 tes2 No response on EOP

      Jetzt möchte ich aber das die einzelnen Spalten getrennt werden, sodass ich beispielsweise in einem Array dann die Zeile habe mit den Zelleninhalten. Angenommen JID ist Zeile 13, die Zeile mit der 12 am Anfang ist Zeile 14 und die Zeile mit der 2 am Anfang ist die Zeile 15 so soll in einem Array z.B.

      $output[14][JID] der 12 entsprechen und
      $output[15][Status] den Fehler "No response on EOP" enthalten.

      Dazu habe ich mir schon diverse Sachen überlegt z.B.

      PHP-Code:
      explode();
      oder
      str_replace
      (); 
      Problem ist aber, dass zwischen den Spalten immer eine andere Anzahl an Leerzeichen steht. Bei Zeile 14 zwischen 12 und test1 z.B. 4 Leerzeichen, die Spalte Status enthält garkein Text deswegen folgt auf dem benutzer test1 keien Leerzeichen mehr und die Zeile 15 hat zwischen 2 und tes2 wohl 5 Leerzeichen aber zwischen tes2 und No response on EOP sind 9 Leerzeichen. Wie kann ich diese differenz auffangen? Ich möchte später die Daten wohl genau so ausgeben nur halt in einer Tabelle sodass man nach JIDs, Benutzer oder Status sortieren kann und z.B. laufende Jobs mittels der JID abbrechen kann.

      Komplizierter zu erklären als wenn man weis was man möchte Ich hoffe es ist so verständlicher.

      Kommentar


      • #4
        Das hätte man aber kaum umständlicher erklären können.
        Um es zusammen zu fassen: Du möchtest einen String an einer Stelle teilen. Diese Stelle wird durch ein oder mehrere Whitespaces gekennzeichnet.

        Lösung:
        [MAN]preg_split[/MAN] mit der Zeichenklasse \s
        [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

        Kommentar


        • #5
          Vielen Dank Frank,

          entlich macht die Anzahl der Leerzeichen nichtsmehr aus

          Liebe Grüße

          BJ01090

          Kommentar

          Lädt...
          X