1

ajax からいくつかの php ページを読み込んでいて、何度も再接続したくないので、phpseclib 接続をシリアル化しようとしています。

ページ 1 - 最初に SSH2 を定義する

require("Net/SSH2.php");
session_start();
$ssh = new Net_SSH2 ("localhost");
if ($ssh->login($username, $pass)) {
$_SESSION['obj'] = serialize($ssh);

}else{
echo "Invalid Login !!!";
}

ページ 2 - unserialize を使用して保存されたセッションを取得する

session_start();
require("Net/SSH2.php");
$ssh = unserialize($_SESSION['obj']);
echo $ssh->exec('ls');

ログイン情報も入れたいので、$_SESSION['obj']そのphpページにいるときはいつでも..$ssh = unserialize($_SESSION['obj']);$ssh->exec('pwd')

回避策はありますか、またはそのPHPページにいるときは常にNet/SSH2.phpに接続/ログインする必要がありますか???

4

2 に答える 2

2

使用している PHP のバージョンによっては、ssh 接続用の静的変数を宣言することができます。

phpseclib が pfsockopen を使用する場合、既存の接続を再利用できる可能性がありますが、これはロングショットであり、ライブラリの変更が必要になる場合があります。

しかし、一般的に言えば、PHP でやりたいことを行うことはできません。スクリプトが終了すると、実行中のプロセスが終了するため、開いているすべてのソケットが閉じられます。確かに、セッション変数に格納することはできません。Net_SSH2 オブジェクトがスコープ外になるとすぐに破棄されます。

于 2013-03-12T12:56:10.550 に答える
0

永続的な接続を確立する唯一の方法は、接続を開いたままにしておくスクリプトを実際に常に実行することです。つまりwhile (true) { ... }、接続を一度開いて保持する終わりのないループを持つスクリプトが 1 つあるということです。次に、このスクリプトと通信してコマンドを実行させる方法を見つける必要があります。AMQPØMQGearman、ソケット、および同様の手法を使用できます。

于 2013-03-12T13:00:18.867 に答える