pfsockopen似乎没有工作?

时间:2013-03-13 15:54:18

标签: php persistence

我的环境

我正在尝试通过CLI在Windows 7中运行此PHP脚本。

测试背景

为了建立SSH,必须发送和接收横幅消息。您将“SSH-2.0-whatever \ r \ n”发送到服务器,服务器将您发回“SSH-2.0-whatever \ r \ n”返回(这也可以通过其他方式完成),然后您会收到一条消息包含服务器支持的算法。即

(脚本1)

<?php
$fsock = fsockopen('shell.sourceforge.net', 22);
echo fgets($fsock, 1024);
fputs($fsock, "SSH-2.0-test\r\n");
echo fread($fsock, 1024);

这是输出:

SSH-2.0-OpenSSH_5.3
  ♥♀
¶ólÆƧw↔F;ï÷╝ähºv   ~diffie-hellman-group-exchange-sha256,diffie-hellman-group-e
xchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1   ☼ssh-rsa,s
sh-dss   ¥aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des
-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator
.liu.se   ¥aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3de
s-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysato
r.liu.se   ihmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160
@openssh.com,hmac-sha1-96,hmac-md5-96   ihmac-md5,hmac-sha1,umac-64@openssh.com,
hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96   §none,zlib@
openssh.com   §none,zlib@openssh.com

代码

所以考虑到上面的输出,似乎这两个脚本一个接一个地运行,应该给出相同的输出:

(脚本2)

<?php
$fsock = pfsockopen('shell.sourceforge.net', 22);
echo fgets($fsock, 1024);

(脚本3)

<?php
$fsock = pfsockopen('shell.sourceforge.net', 22);
fputs($fsock, "SSH-2.0-test\r\n");
echo fread($fsock, 1024);

不幸的是,脚本1与脚本2和脚本3的组合不匹配。脚本3似乎正在运行,就像脚本2从未这样做。输出:

SSH-2.0-OpenSSH_5.3

SSH-2.0-OpenSSH_5.3

为什么不起作用?

1 个答案:

答案 0 :(得分:2)

pfsockopen()函数对PHP process持久有效。

通过 CLI SAPI (如示例中)每次执行脚本都会启动一个新的PHP过程。

当脚本2结束时,PHP进程也会结束,持久套接字关闭

当脚本3启动时,会创建一个新的PHP进程并初始化一个新的持久套接字。

因此,脚本3开始了一个全新的对话&#34;使用远程服务器以及获得这些结果的原因。

有关持久性php套接字如何工作的非常好的描述:请参阅:Concurrent use of a persistent PHP socket