PHP fputs "waits" 直到脚本结束
PHP fputs "waits" until the end of the script
目前我正在尝试开发一个 PHP 脚本用作 client/server 应用程序的公开可用部分。 php 脚本应该用于使用一次性令牌对用户进行身份验证。
应用程序的另一部分是 java 程序,它为其他应用程序连接提供了一个 telnet 套接字。身份验证是通过此 telnet 连接完成的。
java 部分已经可以使用了 - 但我仍然对 PHP 部分有很大的疑问。
在 php 中,我已经打开了一个到 java 程序的 telnet 端口的连接,目前可以正常工作。初始化连接后,java 程序等待来自 PHP 脚本的输入以验证用户。
身份验证过程完成后,它 returns 一个字符串到 PHP 脚本(或连接到其 telnet 服务器的任何其他程序),PHP 脚本应该输出。
在解释我的问题之前,这是 PHP 脚本中实际通信发生的部分:
$tnconn = fsockopen("localhost", 53135, $errno, $errstr, 2);
if(!$tnconn) {
echo "SERVER_UNAVAILABLE";
die();
} else {
$data = $p_ip." ".$p_name." ".$p_token;
fputs($tnconn, $data);
while (true) {
if(($telnet_response = fgets($tnconn)) == false) {
break;
}
}
}
echo $telnet_response;
似乎 fputs()
语句在循环之后执行,即使它应该在循环开始之前发生 - 否则 java 应用程序无法获取传递给 php 脚本,但需要它来验证用户。
接收到数据后,telnet服务器会立即输出字符串来表示认证是否成功。
我尝试暂时删除循环,并且数据已通过 fputs()
成功传递,所以我假设 php 等到整个脚本完成然后执行函数。
如何让它在循环之前发送数据?
提前致谢。
问题可能是您需要在数据字符串的末尾发送一个 \n
,以便 telnet 服务器知道您已经发送了完整的数据序列。否则它很可能坐在那里等待更多输入。
尝试:
$data = $p_ip." ".$p_name." ".$p_token . "\n";
目前我正在尝试开发一个 PHP 脚本用作 client/server 应用程序的公开可用部分。 php 脚本应该用于使用一次性令牌对用户进行身份验证。
应用程序的另一部分是 java 程序,它为其他应用程序连接提供了一个 telnet 套接字。身份验证是通过此 telnet 连接完成的。
java 部分已经可以使用了 - 但我仍然对 PHP 部分有很大的疑问。
在 php 中,我已经打开了一个到 java 程序的 telnet 端口的连接,目前可以正常工作。初始化连接后,java 程序等待来自 PHP 脚本的输入以验证用户。
身份验证过程完成后,它 returns 一个字符串到 PHP 脚本(或连接到其 telnet 服务器的任何其他程序),PHP 脚本应该输出。
在解释我的问题之前,这是 PHP 脚本中实际通信发生的部分:
$tnconn = fsockopen("localhost", 53135, $errno, $errstr, 2);
if(!$tnconn) {
echo "SERVER_UNAVAILABLE";
die();
} else {
$data = $p_ip." ".$p_name." ".$p_token;
fputs($tnconn, $data);
while (true) {
if(($telnet_response = fgets($tnconn)) == false) {
break;
}
}
}
echo $telnet_response;
似乎 fputs()
语句在循环之后执行,即使它应该在循环开始之前发生 - 否则 java 应用程序无法获取传递给 php 脚本,但需要它来验证用户。
接收到数据后,telnet服务器会立即输出字符串来表示认证是否成功。
我尝试暂时删除循环,并且数据已通过 fputs()
成功传递,所以我假设 php 等到整个脚本完成然后执行函数。
如何让它在循环之前发送数据?
提前致谢。
问题可能是您需要在数据字符串的末尾发送一个 \n
,以便 telnet 服务器知道您已经发送了完整的数据序列。否则它很可能坐在那里等待更多输入。
尝试:
$data = $p_ip." ".$p_name." ".$p_token . "\n";