Ausgabe von CMD in Variable

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

  • Ausgabe von CMD in Variable

    Hallo zusammen.

    Ich habe in einem Script folgende Zeile:

    exec("/sys/cmd.exe /K nbtstat -A $strIP",$output);


    Nun habe ich aber das Problem, dass meine Variable $output leer bleibt.

    Warum ???

    Wie kann ich sonst die Ausgabe von CMD abfangen und in einer Variablen speichern ?

    Bin für jede Hilfe dankbar !


    MfG MadOne23

  • #2
    wer lesen kann ist klar im Vorteil:
    exec() executes the given command, however it does not output anything. It simply returns the last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.

    Kommentar


    • #3
      Das ist ja laut Doku richtig was du da sagst, allerdings hab ich es auch schon mit passthru() versucht. Das Ergebnis war das selbe... Die Variable blieb leer.

      Ausserdem würde ich hier nichts posten, wenn ich nicht mindestens das PHP Handbuch dazu befragt hätte....

      MfG MadOne23

      Kommentar


      • #4
        du kannst auch mit system versuchen, aber es wäre ohnehin viel besser, die Ausgabe in einer Datei umzuleiten und ide Datei anschliessend zur Auswertung öffnen

        btw: exec liefert einen String zurück, du hast aber nicht davon Gebrauch gemacht.

        Kommentar


        • #5
          btw: exec liefert einen String zurück, du hast aber nicht davon Gebrauch gemacht.


          kannst du mir das mal bitte genauer erklären. eigentlich sollte die Ausgabe doch in $output gespeichert werden...

          Kommentar


          • #6
            versuch mal so:

            PHP-Code:
            $output = array();
            $strOut exec('...',$output,$intOut);
            echo 
            'strOut: '.$strOut.'<br />intOur: '.$intOut.'<pre>';
            print_r($output);
            echo 
            '</pre>'

            Kommentar


            • #7
              also noch mal zum genauen Verständnis...

              Meine gesamte Funktion sieht jetzt so aus:

              <?php

              $strIP = getenv ( "REMOTE_ADDR" );
              $output = array();
              exec("sys/cmd.exe /K nbtstat -A $strIP",$output, $intOut);
              echo 'strOut: '.$strOut.'<br />intOut: '.$intOut.'<pre>';
              print_r($output);
              echo '</pre>';

              ?>


              Klingt ja auch soweit richtig, allerdings ist die Ausgabe nicht das was ich will !!
              Die sieht nämlich genau so aus:

              strOut:
              intOut: 1
              Array
              (
              )


              Aber WARUM ???

              Kommentar


              • #8
                Aaaaaaah, aua, hab vergessen dir zu sagen, dass du den Dienst auch noch erlauben musst, in Interaktion mit dem Desktop treten zu dürfen. Das macht man in Dienst -> Eigenschaften -> Anmelden -> Häkchen dafür setzen -> Apache Dienst neustarten.

                So und die exec Zeile wie folgt ändern:
                PHP-Code:
                $strOut exec("nbtstat -A $strIP",$output,$intOut); 
                dann soll es funz

                Kommentar


                • #9
                  Sorry, ich steh gerade auf der Leitung...

                  Sag mir noch mal bitte ganz genau wo ich diese Einstellung treffen muss.

                  Kommentar


                  • #10
                    Original geschrieben von MadOne23
                    Sag mir noch mal bitte ganz genau wo ich diese Einstellung treffen muss.
                    ist das so schwer, sich da mal durchzuklicken ...?

                    (Win Xp vorausgesetzt

                    systemsteuerung -> verwaltung -> dienste -> (apache auswählen) -> eigenschaften -> registerkarte "anmeldung"

                    und da solltest du dann unter "lokale anmeldung" eine option "datenaustausch zwischen dienst und desktop zulassen" finden ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Also sollte es ja dann so funktionieren, oder ??

                      PHP-Code:
                      <?php

                      $strIP 
                      getenv "REMOTE_ADDR" );
                      $output = array();
                      $strOut exec("nbtstat -A $strIP",$output,$intOut);
                      echo 
                      'strOut: '.$strOut.'<br />intOut: '.$intOut.'<pre>';
                      print_r($output);
                      echo 
                      '</pre>';

                      ?>

                      Ich hab den Haken bei Interaktion mit dem Desktop gesetzt, allerding ist das Ergebnis das selbe wie vorher....

                      Kommentar


                      • #12
                        Dienst auch neugestartet? mach mal echo $strIP; ist was drin?

                        Kommentar


                        • #13
                          hab sowohl den Dienst als auch zur Vorsicht den Rechner neu gestartet...

                          bei echo $strIP; kommt (wie erwartet) die IP des aufrufenden rechners bei raus.

                          Nur die Übergabe von CMD in eine Variable funzt nach wie vor nicht....

                          Kommentar


                          • #14
                            ist safe_mode on oder off? bei on, tja, geht nicht, weil der Apache-User kein Recht hat Programme ausserhalb des in safe_mode_exec_dir angegebenen Verzeichnisses auszuführen.

                            oder ist open_basedir gesetzt? wenn ja, können Dateioperationen nur noch unterhalb dieses Verzeichnisses vorgenommen werden.

                            bekommst du gar keine Fehlermeldung bzw. Warnings? Wasfür ein Error-Level ist gesetzt?

                            Kommentar


                            • #15
                              also, safe_mode ist off folglich braucht ja auch safe_mode_exec_dir nicht gesetzt zu sein, oder ??

                              open_basedir ist auch nicht gesetzt.

                              als error level ist folgendes eingetragen:

                              error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT


                              Und NEIN, ich bekomme gar nichts an errors ausgespuckt...

                              Kommentar

                              Lädt...
                              X