0

我需要自动化我们系统的几个功能,不幸的是这些功能没有 API,只有 telnet 命令。

所以,我发现了这个:http ://www.geckotribe.com/php-telnet/它本质上是 PHP 的 Telnet 类。

起初我遇到了奇怪的问题,因为它尝试登录太快,所以我在连接之间添加了额外的 sleep(2) ,并输入了用户名和密码。

现在解决问题:似乎,在执行一个只输出一行的命令后,下一个(多行输出)将系统挂起 2 分 15 秒(在 Eclipse 调试模式下)到 1浏览器加载最少 20 秒(仅在我将超时设置为 180 秒后...)。

它发生的那一行是: $r.=fread($this->fp,1000); 在类的 DoCommand() 函数中。

这是我尝试执行的脚本的 pastebin 链接,以及我最终得到的输出(经过修改以保护信息..)

代码: http: //pastebin.com/TXEHWa05

输出: http: //pastebin.com/mVFm5HM2

任何想法如何调试这个原因?到目前为止,我的项目中甚至不需要调试器 :( 理想情况下,我希望最多在 5 秒内完成在 telnet 上执行 2-3 个命令。而不是更多。(因为一旦我们弄清楚了,我会添加功能断开用户连接等)。

我希望使用 fsockopen 对这种 PHP 用法更有经验的人可以提供帮助:)

4

1 回答 1

1

此调用调用的循环一次读取 1000 个字节的数据,直到它接收到所有数据。socket_get_status 调用可能总是返回 'unread_bytes' 的值,并且这只是循环,直到您的强制超时调用。另一端的服务可能正在返回一个相当大的响应,在这种情况下,您可以在每次挂机时将字节读取长度增加 1000,直到找到合适的数字。此外,通过 var_dump() 每次都输出 fread 和 socket_get_status 的结果来做一些调试,看看它挂在哪里。

于 2010-11-25T18:34:09.137 回答