2009-06-02 13 views
0

Ich versuche, PHP eine Batch-Datei aufrufen, die eine RTF-Datei und konvertiert sie in eine PDF mit einem OpenOffice-Makro. Ich habe die Batch-Datei in der Befehlszeile getestet und es funktioniert gut, aber ich habe kein Glück, die gleiche Batch-Datei von PHP aufrufen und verwenden.Problem mit PHP-Exec-Befehl zum Ausführen einer Batch-Datei

Meine Maschine OS ist XP Professional SP 3. Ich verwende IIS 6 und PHP Version 5.2.9. Ich habe Ausführungsberechtigungen für den Internetbenutzer unter c: \ windows \ system32 \ cmd.exe erteilt. Ich habe den vollständigen Pfad zu der Batch-Datei angegeben, die ausgeführt wird, und den vollständigen Pfad zur RTF-Datei, die konvertiert werden soll.

Die PHP sieht wie folgt aus, wo $ arg die RTF konvertiert werden soll:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf"; 
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg"; 

dann in einem Try-Catch ich den Befehl exec aufrufen:

exec("$command 2>&1 && exit", $ret, $err); 

I echo die Ergebnisse nach der Haken:

echo "ret: "; 
print_r ($ret); 
print "<br>"; 
echo "err is "; 
echo $err; 
print "<br>"; 
echo "DONE!"; 

Und das ist, was ich sehe:

ret: Array () 
err is 0 
DONE! 

Die RTF-Datei wird nicht konvertiert und ich sehe die Fehler nicht. Irgendwelche Ideen, was ich als nächstes versuchen kann? Vielen Dank!!!

+0

Können Sie Ihre Stapeldatei auflisten? – cdonner

+0

Verwandte, [Wie führen Sie eine .bat-Datei von PHP?] (Http://stackoverflow.com/q/835941) – jww

Antwort

0

Wird PHP im abgesicherten Modus ausgeführt? Wenn dies der Fall ist, werden Shell-Befehle mit maskiert. Vielleicht ist das das Problem?

Haben Sie die Kontrolle über den Server, auf dem das PHP-Skript ausgeführt wird?

1

Ich wette, das ist über Berechtigungen.

In einem typischen Setup wird PHP als Apache ausgeführt - Sie sollten also sicherstellen, dass Apache die Rechte zum Ausführen der Batchdatei hat.

auch, überprüfen Sie this relevant SO question und this google search.

1

Sieht aus wie das Ausgabearray leer ist. Soll Ihr Stapelscript ausgegeben werden?

Auch escapeshellcmd und escapeshellarg sollte

1

Sie IIS als Webserver verwenden verwendet werden? Wenn dies der Fall ist, funktioniert die PHP-Exec-Funktion standardmäßig nicht und Sie sollten die Sicherheitsmaßnahmen, die die Ausführung verhindern, NICHT umgehen.

Überprüfen Sie Ihre Ereignisanzeige und Sie sollten einige Fehler in Bezug auf Ihr Problem finden. Führen Sie eine Abfrage über Google nach: IIS PHP exec. Dies sollte Ihnen eine große Auswahl an Informationen über das Problem geben.

Grundsätzlich versucht die PHP-Exec-Funktion, eine neue cmd.exe-Instanz zu forschen. IIS verbietet dies, weil es eine Sicherheitslücke im System öffnen könnte.

Die beste Lösung, die ich gefunden habe, ist, dass Ihr PHP-Skript entweder den Befehl, den Sie ausführen möchten, in eine flache Datei schreibt oder einen Datenbankeintrag erstellt. Sie müssen dann ein seperates Skript schreiben, das vom Windows-Scheduler gestartet wird, um alle 10 Minuten zu starten, um Ihre Flat-Datei oder Datenbank zu überprüfen, ob Befehle ausgeführt werden können.Das neue Skript führt dann die Befehle aus und platziert entweder die Ergebnisse oder eine Ausführungsbestätigung, auf die Ihre Webanwendung zu einem späteren Zeitpunkt zugreifen kann.

Es ist sicher ein Kludn.

Verwandte Themen