我正在尝试从PHP执行stream_socket_client()
以从Windows接收数据。这是我的环境:
Localhost :Windows 8和PHP 5.3.8。 脚本完美无缺,并且持续25秒。 Windows Telnet :从Windows Telnet客户端,它可以正常工作。我可以从服务器接收数据。 外部服务器:带有PHP 5.3.3的centOS。脚本需要5分钟到超时。 内部服务器:带有PHP 5.3.3的centOS。这段经文永远不会出现。
注意:要使内部服务器正常工作,$address
变量将更改为192.168.0.7
。
我的问题更多的是我应该寻找什么?我应该担心5.3.3 Vs 5.3.8吗?或者Linux上有什么东西我必须专注于这项工作吗?
allow_url_fopen
设置为1。ini_set('max_execution_time',30);
$address = 'xxxxxxxxxxxxxxxxxxx';
$url = 'tcp://' . $address . ':6000';
$fp = stream_socket_client($portao, $errno, $errstr, 10);
if (!$fp) {
echo ("$errstr ($errno)<br />\n");
exit;
} else {
$out = 'open 192.168.0.22' . PHP_EOL;
fwrite($fp, $out);
$output = 'Nothing here.';
while (!feof($fp)) {
$output = stream_get_contents($fp);
}
fclose($fp);
echo $output;
exit;
}
答案 0 :(得分:0)
我在$out = 'open 192.168.0.22' . PHP_EOL;
行更具体地PHP_EOL
发现了问题。由于服务器目标正在运行Windows,因此它需要\r\n
作为字符返回。我的计算机(localhost)运行的是Windows PHP_EOL = \r\n
,但是一旦我在Linux服务器上部署了应用程序,PHP_EOL
就会设置为\n
。我的问题通过以下方式解决了:
$out = 'open 192.168.0.22' . "\r\n";
注意:字符\r\n
必须用双引号标记(""
)包装才能生效。