Michael Keller: Perl Script ausführen aus PHP (exec())

Guten Tag,

Ich habe ein kleines Perl-Script, dass ich gerne aus PHP heraus starten möchte. Es gibt immer einen Output und versended eine SMS, wenn es abgelaufen ist - also sauber überprüfbar, ob es gelaufen ist.

Ich habe folgendes PHP-Script:
<?
$ausgabe=exec("/home/verzeichnis/scriptname",$fehler);
echo $ausgabe;
echo $fehler[0];
?>

Wenn ich dieses Script als nobody (bei mir Apache-User) von der Konsole aus ausführe:
/usr/local/bin/php /home/verzeichnis/scriptname
erhalte ich die Ausgabe des Programms und das SMS wird versendet.

Wenn ich die Seite aber über http aufrufe gibt es keine Ausgabe und eine SMS wird auch nicht verschickt.

Ich habe überall gelesen, es müssen Berechtigungsprobleme sein. Ich habe dem Script testweise 777 verpasst und trotzdem gehts nicht. Und, dass es von der Konsole aus mit dem gleichen Benutzer funktioniert irritiert mich noch zusätzlich.

Hat jemand eine Idee, wo das Problem liegen könnte?

Viele Grüsse aus der Schweiz
Michael

PS: Andere Programme kann ich per exec() starten.. - kein Safe-Mode oder so...

  1. Guten Tag,

    Ich habe ein kleines Perl-Script, dass ich gerne aus PHP heraus starten möchte. Es gibt immer einen Output und versended eine SMS, wenn es abgelaufen ist - also sauber überprüfbar, ob es gelaufen ist.

    Ich habe folgendes PHP-Script:
    <?
    $ausgabe=exec("/home/verzeichnis/scriptname",$fehler);
    echo $ausgabe;
    echo $fehler[0];
    ?>

    Wenn ich dieses Script als nobody (bei mir Apache-User) von der Konsole aus ausführe:
    /usr/local/bin/php /home/verzeichnis/scriptname
    erhalte ich die Ausgabe des Programms und das SMS wird versendet.

    Wenn ich die Seite aber über http aufrufe gibt es keine Ausgabe und eine SMS wird auch nicht verschickt.

    Ich habe überall gelesen, es müssen Berechtigungsprobleme sein. Ich habe dem Script testweise 777 verpasst und trotzdem gehts nicht. Und, dass es von der Konsole aus mit dem gleichen Benutzer funktioniert irritiert mich noch zusätzlich.

    Hat jemand eine Idee, wo das Problem liegen könnte?

    Viele Grüsse aus der Schweiz
    Michael

    PS: Andere Programme kann ich per exec() starten.. - kein Safe-Mode oder so...

    Hallo Michael,

    ich hatte ähnliche Probleme mit einem einfachen Formular gehabt.
    Das Problem lag anscheinend darin, dass die Variablen nur lokal und nicht global weitergereicht werden. Du solltest also die Variablen global definieren. Versuche außerdem mal das PHP-Script im Body auszuführen.

    MfG

    Matthias Cormann

    1. Hallo Matthias

      ich hatte ähnliche Probleme mit einem einfachen Formular gehabt.
      Das Problem lag anscheinend darin, dass die Variablen nur lokal und nicht global weitergereicht werden. Du solltest also die Variablen global definieren. Versuche außerdem mal das PHP-Script im Body auszuführen.

      Das ist nicht das Problem. Wenn ich eine nicht-Perl Programmm so aufrufe bekomme ich dessen Ausgabe zu sehen. Das Problem ist, dass das Perl-Script gar nicht erst abläuft!

      Viele Grüsse
      Michael

    2. Hi!

      Wenn ich dieses Script als nobody (bei mir Apache-User) von der Konsole aus ausführe:
      /usr/local/bin/php /home/verzeichnis/scriptname
      erhalte ich die Ausgabe des Programms und das SMS wird versendet.

      Da stimmt dann aber was nicht, wieso startest Du das Script in der Shell mit PHP und aus PHP direkt? Vielleicht ist es ein PHP-Script?

      Ich habe das auch schon öfter gemacht und hatte noch nie Probleme. Du solltest den Aufruf aus der Shell mal 1:1 in das Script kopieren.

      Grüße
      Andreas