【问题标题】:Through php how can I close an active ssh connection which is created by php ssh2_connect?通过 php 如何关闭由 php ssh2_connect 创建的活动 ssh 连接?
【发布时间】:2012-06-07 07:35:35
【问题描述】:

我使用以下代码创建了一个 ssh 连接。

    $connection = ssh2_connect($masterIp, 22);

    // authenticating the remote server connection with credentials
    ssh2_auth_password($connection, $user, $password);

    // secure ftp connection to create directory if not exist
    $sftp = ssh2_sftp($connection);

完成操作后我需要关闭$connection, $sftp。 如何安全地关闭连接。我可以使用 unset() 函数吗?

【问题讨论】:

    标签: php ssh


    【解决方案1】:

    是的,未设置就足够了。

    在 PHP 中,当资源超出范围或未设置时,它们会自动关闭(无论如何都应该关闭,除非扩展破坏了标准 PHP 模型)。

    (好吧,只有当所有对资源的引用都被销毁时,它才会被车库收集并关闭)

    【讨论】:

    • @hakre 绝对是一个有趣的话题。我一直认为(我知道我在某处读过它,尽管我怀疑任何权威性的地方)一旦对资源的所有引用都消失了,PHP 就会关闭资源。
    • 有类似in the PHP manual 的东西(已经链接到那里的答案之一),但不清楚这是否意味着句柄已关闭。
    • @hakre 是的,我希望手册更清晰。 “由垃圾收集器释放”似乎意味着“关闭然后释放”,但绝不是一个安全的假设。过去 30 分钟我一直在浏览 PHP 源代码,但 GC 代码对我来说很难理解。
    【解决方案2】:

    如果您想确保正确关闭 SSH 会话,请考虑使用 phpseclib, a pure PHP SSH implementation。它会发送所有必需的 SSH 数据包,以使用析构函数关闭数据包,如果您不想使用它,它有一个 $ssh->disconnect()。

    也可以生成更便携的代码。

    【讨论】:

      【解决方案3】:

      SSH 连接一直打开直到关闭:

      ssh2_exec($connection, 'exit;');
      

      没有明确的ssh2_close 命令。

      unset 也很有可能会终止网络连接。至少当 PHP 进程结束时,连接应该会自动关闭。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多