如何序列化phpseclib?

时间:2013-03-12 12:51:46

标签: php serialization phpseclib

我一直在尝试序列化phpseclib连接,因为我从ajax加载一些php页面,我不想一次又一次地重新连接。

第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页 - 使用反序列化获取存储会话

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 ???

2 个答案:

答案 0 :(得分:2)

根据您拥有的PHP版本,您可以尝试为ssh连接声明一个静态变量。

如果phpseclib使用pfsockopen,它可能能够重用现有的连接 - 但这是一个很长的问题,可能需要修改库。

但总的来说,你不能在PHP中做你想做的事。当脚本完成时,所有打开的套接字都会关闭,因为执行过程会终止。 你当然不能将它存储在会话变量中 - 只要Net_SSH2对象超出范围就会被销毁。

答案 1 :(得分:0)

持久连接的唯一方法是实际上有一个持续运行的脚本,这样可以保持连接打开。这意味着你有一个带有永不停止的while (true) { ... }循环的脚本,它会打开一次连接并保留它。然后,您需要找到一种与此脚本进行通信的方法,以使其执行命令。可以使用AMQPØMQGearman,套接字和类似技术。