Aufruf von Perl von PHP?

8

Ich habe ein PHP-Skript, das eine Formulareingabe verarbeitet. Aus Konstruktionsgründen, die etwas außerhalb meiner Kontrolle liegen und die ich nicht vollständig ändern möchte, muss ich ein Perl-Skript mit den im HTML-Formular angegebenen Parametern aufrufen.

Ich habe alle Eingaben bereinigt und sie dann in eine Datei namens input ausgegeben, die von dem Perl-Skript gelesen wird, das aus Gründen der Kürze in dieser Frage script.pl heißt. Script.pl sollte einige Dinge tun und dann alle Ausgaben in eine Datei namens output schreiben.

Ich rufe das Perl-Skript von PHP so auf:

%Vor%

Nicht gut, nichts passiert. Ausgabe wird nicht erstellt, Fehler wird nicht erstellt und der Nebeneffekt tritt nicht auf.

Mein Apache läuft als www-data Benutzer- und Gruppen-ID. Mein Verzeichnis ist mit 775 Einstellungen mit Besitz als ich: www-data festgelegt. (Mein Benutzername wird aufgrund von Privatsphäre durch "mich" ersetzt.)

Meine Frage ist zweifach: 1) Mache ich das falsch? Wenn ja, wie sollte ich den Code verbessern? 2) Gibt es einen vernünftigeren Weg, Fehler in der Systemausführung zu finden?

Nach einiger Zeit in Perl programmiert, fühlt sich PHP wie ein Schmerz in den Arsch.

Betriebssystem: Ubuntu Server Edition

    
Razor Storm 30.08.2010, 01:13
quelle

4 Antworten

1

popen kann verwendet werden, um die Shell-Antwort zu erhalten. das ist deine beste Wette. Welches kann Ihnen helfen zu debuggen, warum System verärgert ist. Wenn Ihr Pl "Hallo" und "Tschüss" sagt, kann Popen das sogar lesen.

  

Wenn der auszuführende Befehl nicht gefunden wurde, wird eine gültige Ressource zurückgegeben. Das mag seltsam erscheinen, macht aber Sinn; Damit können Sie auf alle Fehlermeldungen der Shell zugreifen

Idealerweise hätte ich Daten von stdin genommen und in stdout geschrieben. Popen würde einen sauberen Zugang zu beiden ermöglichen.

popen('pwd;perl script.pl 2>errors;echo done');

Dann können Sie sehen, wo Sie (Verzeichnis) waren, als das System aufgerufen wurde und es "erledigt" hat.

    
thevikas 01.09.2010, 12:16
quelle
1

In der Vergangenheit habe ich Shell_exec () oder Backticks verwendet, um dies zu erreichen.

Die Dokumentation für den Rückgabewert von shell_exec zeigt an, dass sie identisch mit dem Backtick-Operator ist:

Rückgabewerte

Die Ausgabe des ausgeführten Befehls.

Ich hoffe, das hilft.

system () gibt nur den Statuscode zurück.

%Vor%     
user132014 01.09.2010 21:20
quelle
0

Ist Perl im Pfad? Vielleicht müssen Sie es vollständig angeben (z. B. / usr / bin / perl). Gibt system () false zurück, was auf einen Fehler hinweist? Wenn Sie etwas einfacheres versuchen, wie system('/usr/bin/true', $retval) , wird $retval auf 1 gesetzt?

    
ysth 30.08.2010 01:19
quelle
0

Sehen Sie sich die PHP-System () -Dokumentation an. Das Folgende ist der Funktionsprototyp von system ():

%Vor%

Übergeben Sie ein zweites Argument und drucken Sie dann die Rückgabezeichenfolge sowie die zweite Variable aus. Sehen Sie, was der Fehler sagt.

    
tchen 01.09.2010 02:11
quelle

Tags und Links