Ist es möglich, einen Socket mit einer Funktion zu öffnen und Befehle an diesen Socket mit einer anderen Funktion alle von der gleichen Seite zu senden?PHP Share fsockopen zwischen Funktionen auf Seite
Wenn ich das versuche ich: Warning: fputs(): supplied argument is not a valid stream resource
Dies ist der Code, den ich
connect();
cmd("cd /home/tom\n ls\n");
close();
function connect() {
global $passwd;
if (!$fp = @fsockopen("127.0.0.1", 23, $errno, $errstr, 5)) {
exit('Login Failed');
}
stream_set_timeout($fp, 1);
fputs($fp, "tom\n"); sleep(1);
fputs($fp, "$passwd\n"); sleep(1);
$res = fread($fp,1024);
var_dump($res);
}
function cmd ($cmd) {
global $fp;
fputs($fp, $cmd); sleep(1);
$res = fread($fp,1024);
var_dump($res);
}
function close() {
global $fp;
fclose($fp);
}
Jede Idee, wie ich mit dieser Arbeit zu bekommen? Danke
Der unmittelbare Grund hier ist, dass innerhalb 'connect()' Sie erklären _nicht_ '$ fp' als global, daher wird es als lokal behandelt und verloren, wenn Du lebst die Funktion. – arkascha
Allerdings ist die Verwendung der 'global'-Anweisung ohnehin sehr schlecht, Sie sollten Ihren Code umschreiben, um es zu vermeiden. In der Regel implementiert man eine Klasse, die das Dateihandle als Eigenschaft enthält. Auf diese Weise können alle Methoden der Klasse darauf zugreifen, obwohl es nicht global ist, weil alle Methoden auf demselben Objekt operieren, das von der Klasse instanziiert wurde. – arkascha
Entsprechend Ihrem Code sollten Sie $ fp als global am Anfang der connect() Methode deklarieren, um von cmd() aus zugänglich zu sein. –