WAMP DOS Box öffnet sich bei system befehl :-(
christian
- php
hallo ihr lieben
für eine präsentation auf der cebit habe ich ein kleines DOS programm geschrieben, was mir aus einer anwendung daten liesst.
um für meine lokale WAMP das programm zu benutzen, lese ich die ausgabe des programms mit einem system befehl aus und stell es in einer webseite da:
<html>
<body>
<?
$a= system("datei.exe");
echo $a;
?>
</body>
</html>
jetzt möchte ich die daten gerne in einer webanwendung benutzen, aber jedesmal wenn ich dieses programm in meinem browser starte, öffnet sich eine kurze DOS box, die zwar umgehend wieder verschwindet, aber doch irgendwie nervt.
danach habe ich aber die daten schön auf meinem browser stehen.
frage: wie kann ich dieses kurze ploppen der DOS box unterbinden?
leider funktioniert die anwendung nur auf einem windows system.
für jeden tip währe ich dankbar :-)
gruss
christian
Moin!
<?
$a= system("datei.exe");
echo $a;?>
Wenn das alles ist, dann solltest du dein eigenes Programm so umschreiben, dass man es als CGI-Programm benutzen kann, und dann kannst du es direkt in den Webserveraufruf einbinden. Bedeutet also im Prinzip nur: Dein Programm liest die Standardeingabe für eventuelle POST-Eingaben (kommt nicht vor, kannst du also ignorieren), es kann diverse Umgebungsvariablen auslesen für die näheren Umstände des Requests (kommt bei dir noch nicht vor, also ignoriere es auch), und es schreibt das Ergebnis auf die Standardausgabe (das tut es bereits, es fehlt nur noch das passende HTML-Komplettgerüst außenherum).
Mit anderen Worten: Deine datei.exe gehört in ein cgi-bin-Verzeichnis und dort testweise einfach mal direkt aufgerufen. Mal sehen, was passiert. :)
Würde ich jedenfalls mal vermuten.
- Sven Rautenberg
hallo ihr :-)
vielen dank für eure hilfe !!!
zum ersten..leider kommt diese DOS box auch mit dem befehl exec.
mir scheint der weg, das prog als cgi einzubinden am erfolg versprechensten!
da der header nicht korrekt ausgegeben wird, kommt da aber im moment noch ein internal error.
ok, ich muss also mein DOS prog umschreiben.
gibts noch eine andere möglichkeit, die programme anders einzubinden? ich habe auch ein paar compilierte sachen hier, die ich leider nicht noch nachträglich mit dem geeigneten header nachrüsten kann :-(
oder kann ich die header vielleicht sache umgehen?
Mit anderen Worten: Deine datei.exe gehört in ein cgi-bin-Verzeichnis und dort testweise einfach mal direkt aufgerufen. Mal sehen, was passiert. :)
Würde ich jedenfalls mal vermuten.
- Sven Rautenberg
Hallo,
jetzt möchte ich die daten gerne in einer webanwendung benutzen, aber jedesmal wenn ich dieses programm in meinem browser starte, öffnet sich eine kurze DOS box, die zwar umgehend wieder verschwindet, aber doch irgendwie nervt.
Versuche es statt system() mit exec(). Die Rueckgabe ist dieselbe (letzte Zeile des Ergebnisses). exec() erzeugt jedoch keine Ausgabe wie es bei system() der Fall ist und vermutlich ist das auch der Ausloeser fuer die DOS-Box.
Ich verwende exec() z. B. fuer den Aufruf von Java-Modulen (batik-rasterizer.jar fuer SVG --> JPEG/PNG) und es erscheint keine DOS-Box.
exec() bietet auch noch einen optionalen Array-Parameter zur Aufnahme aller Zeilen der Ausgabe.
MfG, Thomas
Moin!
Versuche es statt system() mit exec(). Die Rueckgabe ist dieselbe (letzte Zeile des Ergebnisses).
Nein, ist nicht dieselbe. system() gibt die gesamte Ausgabe zurück, exec() nur die letzte Zeile. Sagt zumindest die PHP-Doku.
- Sven Rautenberg
Moin!
Versuche es statt system() mit exec(). Die Rueckgabe ist dieselbe (letzte Zeile des Ergebnisses).
Nein, ist nicht dieselbe. system() gibt die gesamte Ausgabe zurück, exec() nur die letzte Zeile. Sagt zumindest die PHP-Doku.
Zu schnell geklickt... :)
Die Doku zu exec() sagt auch noch, dass man passthru() verwenden soll, wenn man die gesamte Programmausgabe durchleiten will - was hier ja wohl der Fall ist.
- Sven Rautenberg
Hallo,
Die Doku zu exec() sagt auch noch, dass man passthru() verwenden soll, wenn man die gesamte Programmausgabe durchleiten will - was hier ja wohl der Fall ist.
Aber damit kann man keine Variable mit Inhalt belegen, weil passthru() eine direkte Ausgabe und keinen String erzeugt (void).
Wenn der OP mit system() auskam, sollte ihm exec() helfen, ggf. mit dem Rueckgabearray.
MfG, Thomas
Moin!
Aber damit kann man keine Variable mit Inhalt belegen, weil passthru() eine direkte Ausgabe und keinen String erzeugt (void).
Du hast den derzeitigen Einbindungscode gesehen? :)
- Sven Rautenberg
Hallo,
Du hast den derzeitigen Einbindungscode gesehen? :)
Was meinst Du genau?
Wenn ich in meiner Anwendung exec() durch passthru() ersetze, erhalte ich die (natuerlich unerwuenschte!) Konsolenausgabe im Browser, aber (erwartungsgemaeß) kein Rueckgabeergebnis. Ich suche in meinem Fall (Java/Batik) das Wort "success", welches die erfolgreiche Verarbeitung meines SVG-Dokuments unter Windows und Linux ueber eine Variable mitteilt:
$out=exec($cmd);
if(strstr($out,"success"))$batik_result=true;
if($batik_result)Grafik ausgeben ...
In $out steht bei Erfolg:
"About to transcode 1 SVG file(s) Converting bla.svg to blub.png ... ... success"
Insofern wuesste ich nicht, was mir passthru() hier wie bringen sollte (bezogen auf PHP 4).
MfG, Thomas
Moin!
Du hast den derzeitigen Einbindungscode gesehen? :)
Was meinst Du genau?
Das hier:
<?
$a= system("datei.exe");
echo $a;
?>
Insofern wuesste ich nicht, was mir passthru() hier wie bringen sollte (bezogen auf PHP 4).
_Dir_ nichts. Aber dem Fragesteller mit obigem Einbindungscode.
- Sven Rautenberg
Hallo,
Insofern wuesste ich nicht, was mir passthru() hier wie bringen sollte (bezogen auf PHP 4).
_Dir_ nichts. Aber dem Fragesteller mit obigem Einbindungscode.
Dann schreibe doch nicht so in Raetseln, unter "derzeitigem Einbindungscode" habe ich etwas verstanden, was ich auf php.net zum Aufruf von passthru() vielleicht uebersehen haette und ich probiere hier sinnlos rum ...
MfG, Thomas