2
是否有可能打開一個功能的套接字並使用另一個功能發送命令到該套接字都來自同一頁?PHP分享功能之間的fsockopen頁
當我嘗試這樣我得到:Warning: fputs(): supplied argument is not a valid stream resource
這是我使用
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);
}
任何想法如何得到這個工作的代碼? 謝謝
這裏的直接原因是內部連接'()'你_not_聲明'$ fp'全球,因此它被視爲本地和丟失你放棄了這個功能。 – arkascha
無論如何,使用'global'語句是非常糟糕的風格,你應該重寫你的代碼以避免它。通常一個實現了一個將文件句柄作爲屬性的類。這樣,類的所有方法都可以訪問它,儘管它不是全局的,因爲所有的方法都是在從類中實例化的同一個對象上操作的。 – arkascha
根據你的代碼,你應該在connect()方法開始時聲明$ fp爲global,以便從cmd()訪問。 OMG! –