Moinsen...
Ich bin gerade von der Idee besessen, mit php aus nem browser so ne art telnet zu machen... also, dass alle commands, die eingegeben wurden in einer (aber pro session immer die selbe) shell (da das ganze auf w2k läuft: cmd

).
Ich kann mit proc_open ohne probleme auch eine cmd-shell öffnen, befehle reinschreiben und mir die ganzen ergebnisse ausgeben lassen.
Aber mein problem ist: wenn ich einen Befehl in der cmd ausführe und dann die Ausgabe lesen will hängt das ganze script, bis ich das cmd-fenster schließe (geht auch nur dank dem service-darf-mit-desktop-intaagieren-oder-so-ähnlich-harken

in den settings vom apache-service). Das lesen vom stdin-stream bleibt halt beim ende vom prompt hängen, da da weder \n(is ja keine neue zeile) noch EOF(und der stream is ja auch noch net zu ende) zu finden ist.
Wie bekomm ich aber jetzt an die aktuellen daten der shell ran?
Mein aktueller Code:
Code:
<?php
function fgets_u($pStdn) {
$pArr = array($pStdn);
if (false === ($num_changed_streams = stream_select($pArr, $write = NULL, $except = NULL, 0))) {
print("\$ 001 Socket Error : UNABLE TO WATCH STDIN.\n");
return FALSE;
} elseif ($num_changed_streams > 0) {
return trim(fgets($pStdn, 1024));
}
}
function read($pipe) {
echo '<PRE>';
//while (! feof($pipe))
//echo fgets_u($pipe)."\n";
//while ($buffer = fgets_u($pipe))
//echo $buffer."\n";
while (($buffer = fgetc($pipe)))
echo $buffer;
//while (! feof($pipe))
//echo fgetc($pipe);
//while (! feof($pipe))
//echo fread($pipe, 1024);
echo '</PRE><HR>';
}
error_reporting(E_ALL);
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "error-output.txt", "a")
);
$process = proc_open("cmd", $descriptorspec, $pipes);
echo $process;
echo '<HR>';
if (is_resource($process)) {
read($pipes[1]);
fwrite($pipes[0], "dir\n");
fflush($pipes[0]);
read($pipes[1]);
fwrite($pipes[0], "exit\n");
read($pipes[1]);
fclose($pipes[0]);
fclose($pipes[1]);
//fclose($pipes[2]);
$return_value = proc_close($process);
}
?>
Hope somebody can help me...
mfg LJ
--
Ein gutes Gehirn ist wie ein Sack - es behält alles.
Ein besseres Gehirn ist wie ein Sieb - es behält nur dass, wass man behalten möchte.