【发布时间】:2010-08-11 22:45:24
【问题描述】:
有人知道pfsockopen(); 周围的 SSH/SFTP/FTP 包装类吗??我仍在寻求在 PHP 中保持持久连接。
【问题讨论】:
有人知道pfsockopen(); 周围的 SSH/SFTP/FTP 包装类吗??我仍在寻求在 PHP 中保持持久连接。
【问题讨论】:
快速阅读后,看起来打开一个套接字处理的层与您想要的不同。您想通过 SSH 或 SFTP(应用层)连接,使用通过 TTP/TLS/UDP(传输层)进行连接的方法。
所以你真正想要的(我认为)是使用pfsockopen() 函数创建 SSL 或 TLS 连接,然后使用该连接通过 SSH/SFTP 协议传递数据。
根据PHP网站:
如果你在 OpenSSL 中编译过 支持,您可以为主机名添加前缀 使用 ssl:// 或 tls:// 使用 SSL 或 TLS 客户端连接 TCP/IP 连接到远程主机。
所以我最好的猜测是您将主机名设置为以ssl:// 开头,然后使用 SSH 或 SFTP 端口作为端口(因此端口 22 或端口 989)。比如:
$persistent_socket = pfsockopen("ssl://myhostsite", 22);
或
$persistent_socket = pfsockopen("ssl://myhostsite", 989);
【讨论】:
@user260294:非常感谢http://phpseclib.sourceforge.net/。虽然与原始问题无关,但它为我节省了在类似项目中编写代码的时间。
@Simon:您还没有看到任何人使用 pfsockopen() 专门用于 SSH / SFTP,因为它不适用于这些特定协议。这个想法是,如果一个连接已经存在,您可以使用 pfsockopen 重用它而无需重新发送任何标头,但这对于侦听端口 22 的守护程序是不允许的。您别无选择,只能重新建立连接并重新发送标头。这适用于处理 SSH1/2/SFTP 的任何事物。
对于建立持久连接的守护程序 - 当它超时时,您必须重新连接...所以我认为这样做没有多大意义。
【讨论】:
这是一个围绕 fsockopen() 的 SSH / SFTP 包装类:
http://phpseclib.sourceforge.net/
这不是 pfsockopen() 但也许用 pfsockopen() 替换一个 fsockopen() 调用会解决问题?
【讨论】:
哇,http://phpseclib.sourceforge.net/ 的软件包非常适合 sftp 连接,无需安装或添加模块或任何东西。它只是工作。非常感谢
【讨论】:
我不知道围绕它构建的类实现,但有一个 ssh2 module 如果对你有帮助...
【讨论】: