phpbar.de logo

Mailinglisten-Archive

AW: [php] Passthrou

AW: [php] Passthrou

Wolfgang Hauck php_(at)_phpcenter.de
Wed, 9 Oct 2002 11:07:04 +0200


Hi Norbert, hi Kilian,

>> Ich möchte ein programm über php starten
>okay

int popen ( string command, string mode)

Öffnet eine Verbindung zu einem Prozess, der durch die Anweisung command
ausgeführt wurde.
Kilian muss natürlich dennoch vorher das Betriebsystem abfragen... ;-)

wegen z.B:

In Windows NT and 2000, at least, the shell interprets "2>&1" as in Unix.
You may have to explicitly call cmd.exe (or command.com).

>> und ihm dann immer mal wieder befehle übergeben
>oops,
>wie stellst Du Dir das vor,
>einem laufenden Programm "immer mal wieder" was zu uebergeben.
>Dazu benoetigt man IPC, und das ist selten verfuegbar ...

Das geht natürlich nur in einem Script, d.h. er muss den Prozess auch
wieder beenden. Der Prozesszeiger steht nur dem öffnendem Script zur
Verfügung...

>> Wie kann ich den ausgabestream trennen,
>> wie es das manual schreibt?

Dieser Zeiger kann mit den Funktionen fgets(), fgetss() und fputs() benutzt
werden.

Siehe Manual...

>oops,
>nicht trennen - umleiten ! - z.B.: 'ls -l > temp.log'
>leitet die Ausgabe von 'ls -l' in die Datei 'temp.log' *um*
>Die Datei kannst Du dann oeffnen und lesen, oder auch nicht.

Umleiten geht auch, mit fgets kann man aber die Daten einlesen und während
des Programmablaufs auswerten und das ist bei Programmen die über
Kommandozeilen arbeiten wichtig.
Macht im übrigen auch sehr viel Spass wenn du mit Shells arbeitest.... ;-)
Kann man sehr nette Sachen machen..

$f=popen("vi newfile.txt","w");
sleep(1);
fputs($f,"i"); // insert
sleep(1);
fputs($f,"Hello world\r"); // write the text to vi Editor
sleep(1);
fputs($f,chr(27)); // cancel action
sleep(1);
fputs($f,":wq\r"); // write and quit
pclose($f); // back to php
exit;

Beispiel geht nur bei Linux....
Aber vi solls doch auch für Windows geben ;-))

MFG Wolfgang


php::bar PHP Wiki   -   Listenarchive