2012-06-07 17 views
1

我使用下面的代碼創建了一個ssh連接。通過PHP我怎麼能關閉一個由PHP ssh2_connect創建的活動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()函數嗎?

回答

3

是的,未設置就足夠了。

在PHP中,當資源超出範圍或未被設置時,它們會自動關閉(它們應該是無論如何,除非擴展符破壞標準PHP模型)。

(好吧,這隻會車庫收集,從而關閉時對資源的所有引用被破壞)

+0

嗯,真的嗎? [可以通過取消設置手柄關閉文件嗎?](http://stackoverflow.com/q/10928892/367456) – hakre

+0

@hakre絕對是一個有趣的主題。我一直假設(並且我知道我已經在某處讀過它,儘管我懷疑任何地方都是權威的),一旦所有對它們的引用都消失,PHP就會關閉資源。 – Corbin

+0

在[PHP手冊](http://php.net/manual/en/language.types.resource.php)中有類似的東西(已經在那裏的答案之一上鍊接了),但目前還不清楚意味着手柄關閉或不關閉。 – hakre

1

的SSH連接打開,直到關閉:

ssh2_exec($connection, 'exit;'); 

沒有明確ssh2_close命令。

unset也會終止網絡連接。至少當PHP進程結束時,連接應該自動關閉。

3

如果您想確保您的SSH會話正確關閉,請考慮使用phpseclib, a pure PHP SSH implementation。它使用析構函數發送關閉數據包所需的所有SSH數據包,並且如果您不想使用具有$ ssh-> disconnect()的數據包。

也使得更便攜的代碼。