2010-05-21 18 views
6

Ich möchte eine EXE-Datei auf meinem Apache-Server mit einem PHP-Skript ausführen. das Verfahren wie folgt lautet:wie ein .exe-Programm von PHP-Skript ausführen

  1. Benutzer kommt, füllt ein HTML-Formular

  2. es ein PHP-Skript goses

  3. PHP-Skript führt die name.exe Datei

  4. php druckt die Ausgabe der name.exe Datei auf der Seite.

ich die name.exe ausführen normalerweise aus den Fenstern wie folgt aus:

run--> cmd--> D:\name [command]

die name.exe muss mit anderen Dateien wie Bibliotheken im selben Verzeichnis kommunizieren.

die komplette comand in cmd im Fenster ist wie folgt:

D:\name library.dll [input from user]

führt dann Programm und druckt einige Ergebnisse in cmd Fenster.

Ich möchte tatsächlich dieses Programm auf meinem Server-Formular meine Kunden ausführen. Ich weiß nicht wie, aber jetzt gibt es einen Weg, dies zu tun.

Eine andere verwandte Frage, gibt es irgendeine Shell, die ich auf dem Linux-Server installieren und name.exe darin ausführen kann?

Antwort

6

Bitte überdenken Sie Ihre Lösung da dies wahrscheinlich mehr Probleme (insbesondere Sicherheitsprobleme) verursachen wird, als es löst.Indem laufen ein PHP-Skript ausführen Ihr Programm Sie die Gefahr eines Benutzers die folgende in das Formular eingeben:

John Doe; rm \windows\* 

oder

John Doe; rm d:\name\* 

Sie möchten Benutzereingabe zu einer sehr kontrollierten Teilmenge zu begrenzen, so dass Sie erhalten keine böswillige Befehlsinjektion.

PHP bietet eine exec(), aber seien Sie sehr vorsichtig.

+0

danke ich werde. Das ist ein guter Poit. Ich kann die Eingabe mit meinem Format überprüfen, bevor Sie es per PHP-Skript ausführen lassen. Aber ist das Problem mit 'exec()' lösbar? damit ich es studieren kann. – John

+0

Das Ausführen von externen Programmen ist mit einiger Vorsicht kein Problem, und alle eingehenden Daten mit 'escapeshellarg()' zu umgehen. –

2

Wahrscheinlich möchten Sie oder exec().

Wie für Linux, wenn name.exe gut unter WINE läuft, würden Sie wahrscheinlich passthru() oder shell_exec() und WEIN name.exe laufen rufen verwenden. Ich habe keine Ahnung was name.exe tut, also auch wenn es unter WINE läuft, gibt es keine Garantie dafür, dass es tatsächlich funktioniert.

Es gibt jedoch keine magische Shell, die es Linux ermöglicht, beliebige ausführbare Windows-Dateien auszuführen.

Wie bereits erwähnt, werden sehr Sie vorsichtig, was Sie erlauben exec() oder passthru() oder irgendetwas anderes, das Code zu bekommen außerhalb des Skripts ausführt. Ich werde nicht so weit gehen und sagen, dass du wahrscheinlich nicht tun solltest, was du tust, aber ich arbeite nicht an dem, an dem du arbeitest :)

+2

Es gibt auch keine Anforderung, dass PHP * nicht * unter Windows/IIS ausgeführt werden soll. –

+0

Eigentlich wird 'exec' die letzte Zeile nach der Befehlsausführung zurückgeben. Während ['passthru'] (http://www.php.net/manual/en/function.passthru.php) funktioniert wie OP will. – 0x2D9A3

+0

vielen dank Tim. – John

0

Dies ist eine sehr schlechte Idee. Abgesehen davon, dass Sie dem Benutzerkonto, unter dem Ihr Webserver ausgeführt wird, lächerliche Berechtigungen erteilen müssen, was effektiv dazu führt, dass jeder, der Ihre Site besucht, ausführbare Dateien ausführen kann, besteht das Risiko von Threadsicherheitsproblemen, Dateisystemsperrungsproblemen und anderem.

Wenn Sie unbedingt diese exe verwenden müssen, erstellen Sie ein Warteschlangensystem. Lassen Sie Ihre Website die Formularanforderung in ein praktisches Repository (z. B. eine Datenbank) stellen, und lassen Sie die Datenbank regelmäßig von einem Service abrufen, um diesen Prozess auszuführen. Dies ermöglicht die Trennung von Benutzerkonten und zugehörigen Berechtigungen für die Website und die EXE, eliminiert gleichzeitige Ausführungsprobleme und verringert die Antwortzeit für Ihre Website.

Einige (Husten) Sprachen erlauben es Ihnen, diesen Dienst und Ihren Standortcode in der gleichen Sprache/Technologie zu erstellen, aber in diesem Fall müssen Sie .NET oder andere kompilierte Sprachen erstellen, um ein solches zu erstellen Bedienung.

+0

danke, aber meine erste Frage ist das möglich, meine Idee würde funktionieren? dann werde ich an Sicherheitsfragen denken, es gibt ein Login-System und nur meine Freunde können das System benutzen, ich bin mir sicher über die Sicherheit, aber meine Frage ist: Ist diese Idee mit PHP möglich? – John

+0

John, es gibt keine Möglichkeit sicherzustellen, dass nur Ihre Freunde das System benutzen werden. Das ist der Grund, warum wir die Sicherheit in jeder Anwendung berücksichtigen müssen. Beachten Sie außerdem, dass Funktionsprobleme auftreten und nicht nur Sicherheit. –

+0

Wir wissen nichts über den Befehl 'name'. Vielleicht ist es sicher? Vielleicht betreibt er seinen Webserver als Benutzer, der nur Zugriff auf diesen Befehl hat. Vielleicht kann das Programm 'name' mehrere laufende Prozesse gleichzeitig ohne Nebenläufigkeitsprobleme haben. Deine Punkte sind natürlich noch gültig, aber sie sind nicht unlösbar. –

2

Sie sollten die Benutzereingabe mit escapeshellarg umgehen, bevor Sie sie an den Befehl senden.

$saferinput = escapeshellarg($input); 
system('D:\name library.dll '.$saferinput); 
+0

guten Punkt Emil, danke :) – John

0

Ich denke, wir können dies tun, indem Sie eine Verbindung zum Server mit PHP SSH. Es gibt eine Bibliothek (http://phpseclib.sourceforge.net/), mit der Sie sich per SSH mit dem Server verbinden können. Früher habe ich versucht, eine Verbindung zum Server über telnet und execte .exe herzustellen. Aber mein Schuladministrator hat telnet aus Sicherheitsgründen blockiert, also muss ich an ssh arbeiten.

Verwandte Themen