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! –