Klaus: Perl-Script im PHP ausführen

Hallo,

ich habe das Problem, dass ich ein Perl-Script nicht im PHP ausführen kann.
Ich habe es hierfür mit dem Backticks-Operator versucht.

Wenn ich testweise ein

  
	$output = `dir`;  
	echo "<pre>$output</pre>";  

eingebe, dann erhalte ich ein erwartetes Ergebnis.

Wenn ich aber

  
	$output = `perl -v`;  
	echo "<pre>$output</pre>";  

versuche, scheitert es schon und es wird schlicht gar nichts ausgegeben.

Ich habe es zwischenzeitlich auch schon mit exec() und $WshShell = new COM("WScript.Shell"); versucht, aber hatte damit leider auch keinen Erfolg.

Ich hab den Perlscript-Aufruf auch mal in eine Batchdatei gepackt, aber auch ohne Erfolg.
Direkt aus der Dos-Box des Servers (Windows-Server) aufgerufen, funktioniert es prächtig:
perl meinscript.pl -A 1234 -B abcd -C xyz
Der Aufruf dauert i.d.R. ca. 4-5 Sekunden.

Weiß hier jemand Rat?

  1. hi,

    Weiß hier jemand Rat?

    Guck Dir mal popen() an, das 'p' steht für pipe.

    MfG

    --
    Manche Denkmäler sehen echt beschissen aus.
    1. Hi,

      folgender Versuch funktioniert auch nicht:

        
      	$fp = popen('c:\\script\\stat.bat testparam', 'r');  
      	while(!feof($fp)) {  
                 print fread($fp, 1024);  
                 flush();  
              }  
      	pclose($fp);  
      
      

      D.h. die Batch-Datei wird zwar gestartet, aber der Perl-Befehl darin wird nicht ausgeführt.
      Auch nachdem ich den Pfad auf Perl gesetzt habe.

      Klaus

  2. Tach!

    Ich hab den Perlscript-Aufruf auch mal in eine Batchdatei gepackt, aber auch ohne Erfolg.
    Direkt aus der Dos-Box des Servers (Windows-Server) aufgerufen, funktioniert es prächtig:

    Ist perl im PATH?

    dedlfix.

    1. Hallo,

      Ich hab den Perlscript-Aufruf auch mal in eine Batchdatei gepackt, aber auch ohne Erfolg.
      Direkt aus der Dos-Box des Servers (Windows-Server) aufgerufen, funktioniert es prächtig:
      Ist perl im PATH?

      das ist vermutlich die entscheidende Frage. Vor allem: Ist perl im PATH des Users, unter dem PHP bzw. der Apache läuft? Üblicherweise läuft der Apache und seine Kindprozesse (PHP) als Dienst, also unter dem Account SYSTEM. Für den ist PATH aber in der Regel nur minimalistisch besetzt.

      Ciao,
       Martin

      --
      Lehrer:  Wieviel ist die Hälfte von 8?
      Schüler: Kommt drauf an. Waagrecht 0 und senkrecht 3.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Guten Morgen,

        Ich hab den Perlscript-Aufruf auch mal in eine Batchdatei gepackt, aber auch ohne Erfolg.
        Direkt aus der Dos-Box des Servers (Windows-Server) aufgerufen, funktioniert es prächtig:
        Ist perl im PATH?

        das ist vermutlich die entscheidende Frage. Vor allem: Ist perl im PATH des Users, unter dem PHP bzw. der Apache läuft? Üblicherweise läuft der Apache und seine Kindprozesse (PHP) als Dienst, also unter dem Account SYSTEM. Für den ist PATH aber in der Regel nur minimalistisch besetzt.

        Wie kann ich das prüfen?
        Wenn ich aus der Dos-Box heraus ohne Pfadangaben "perl -v" aufrufe, dann erhalte ich eine entsprechende Antwort.
        Wenn perl nicht im PATH wäre, müsste ich dann nicht wenigstens vom exec() oder den Backticks als Ergebnis ein "Befehl oder Kommando wurde nicht gefunden" zurückbekommen?

        Klaus

        1. Hi,

          Wenn perl nicht im PATH wäre, müsste ich dann nicht wenigstens vom exec() oder den Backticks als Ergebnis ein "Befehl oder Kommando wurde nicht gefunden" zurückbekommen?

          Ich würde erwarten, daß

          • die Backticks den out-Kanal ausgeben
          • die Fehlermeldung "nicht gefunden" im error-Kanal landet
          • folglich die Fehlermeldung nicht erscheint

          Was passiert denn, wenn Du mal den kompletten Pfad angibst, also (z.B. - je nach Installation) c:\perl\bin\perl.exe ?

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hi

            Was passiert denn, wenn Du mal den kompletten Pfad angibst, also (z.B. - je nach Installation) c:\perl\bin\perl.exe ?

            Das hab ich auch schon versuchst, aber auch mit den kompletten Pfaden erhalte ich keine Ausgabe.
            Und ich vermute, dass der Perl-Aufruf einen Fehler erzeugt, der auch im "error-Kanal" landet,
            denn ich habe in der Batch-Datei die Ausgabe testweise in eine Datei umgeleitet, aber es wird keine Datei erzeugt.

            1. Ich habe die Ursache gefunden.
              Das Problem war, dass Fehlermeldungen offenbar nicht zurückgegeben werden, das hätte die Suche erheblich vereinfacht.
              Ich konnte das Problem nachstellen, indem ich die Batch über den Taskplaner habe starten lassen.

              Dadurch konnte ich feststellen, dass zur korrekten Ausführung eine Umgebungsvariable benötigt wird, die durch das manuelle Starten der Batch per Doppelklick zwar vorhanden ist, aber nicht über den Taskplaner und nicht über das PHP-Script.

              Durch das Setzen dieser wurde jezt auch eine korrekte Ausgabe zurückgegeben, mit der ich nun endlich weitermachen kann.

              Vielen Dank für Eure Unterstützung, auch wenn ich das Problem selber finden konnte.

              Klaus

            2. Hi,

              Und ich vermute, dass der Perl-Aufruf einen Fehler erzeugt, der auch im "error-Kanal" landet,
              denn ich habe in der Batch-Datei die Ausgabe testweise in eine Datei umgeleitet, aber es wird keine Datei erzeugt.

              Hast Du auch den Error-Kanal umgeleitet?

              Also sowas in der Art:

              perl.exe -v >out.txt 2>err.txt

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.