我需要自动化系统的几个功能,遗憾的是它们没有API,只有telnet命令。
所以,我发现:http://www.geckotribe.com/php-telnet/本质上是PHP的Telnet类。
起初我遇到了奇怪的问题,因为它试图登录太快,所以我在连接和输入用户名和密码之间添加了额外的睡眠(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使用方面更有经验可以帮助:)
答案 0 :(得分:1)
此调用调用的循环一次读取1000个字节的数据,直到它接收到所有数据。 socket_get_status调用可能总是为'unread_bytes'返回一个值,这只是循环,直到强制超时调用。它可能在另一端的服务返回一个相当大的响应,在这种情况下,你可以每次挂起时将字节读取长度增加1000,直到找到合适的数字。另外,通过var_dump()进行一些调试,每次都看看fread和socket_get_status的结果,看看它挂起的位置。