2
1つの関数でソケットを開き、同じページから別の関数を使用してそのソケットにコマンドを送信することはできますか?私はこれをしようとすると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()からアクセスできるようにする必要があります。 –