BobDerMeister
Erfahrenes Mitglied
ich habe ein php cli-Script welches auf einen Server connectet und die Daten die es von dem Server bekommt in eine Datenbank speichert. Wenn das Script beendet wird muss es sich vom Server mit einem "quit\r\n" verabschieden. Ich wollte es so machen das das Script aus der while-Schleife springt ( break; ) sobald der User eine Taste drückt.
Wenn ich versuche mittels fread() oder fgets() von STDIN zu lesen bleibt das Script hängen bis etwas eingegeben wird. stream_get_meta_data() gibt mir immer 0 unread_bytes zurück egal wie viel ich auf der Tastatur rumhämmere. stream_set_timeout() interesiert STDIN auch herzlich wenig.
Gibt es eine Möglichkeit auszulesen ob der User etwas über die Tastatur eingegeben hat ohne das das Script hängen bleibt?
habs auch schon mit register_shutdown_function() probiert allerdings greift das nicht wenn man das Script mit STRG+C abbricht.
Die einzige Möglichkeit die ich zZ sehe ist php mit --enable-pcntl neu zu kompilieren was ich aber eigendlich vermeiden will.
Wenn ich versuche mittels fread() oder fgets() von STDIN zu lesen bleibt das Script hängen bis etwas eingegeben wird. stream_get_meta_data() gibt mir immer 0 unread_bytes zurück egal wie viel ich auf der Tastatur rumhämmere. stream_set_timeout() interesiert STDIN auch herzlich wenig.
Gibt es eine Möglichkeit auszulesen ob der User etwas über die Tastatur eingegeben hat ohne das das Script hängen bleibt?
PHP:
<?
$fp = @fsockopen($fms32_server, $fms32_port, $errno, $errstr, 30);
if (!$fp) {
echo "Fehler bei der Verbindung zum Server: ".trim($errstr)." ($errno)\n";
} else {
while (!feof($fp)) {
$data = trim(fgets($fp));
/* Daten in DB speichern */
if (/*Tase gedrückt */) {
break;
}
}
}
fwrite($fp, "quit\r\n");
fclose($fp);
?>
habs auch schon mit register_shutdown_function() probiert allerdings greift das nicht wenn man das Script mit STRG+C abbricht.
Die einzige Möglichkeit die ich zZ sehe ist php mit --enable-pcntl neu zu kompilieren was ich aber eigendlich vermeiden will.