带 SSL 的流套接字
我在 PHP 5.6 中遇到了流套接字和 SSL 问题。SSL 似乎正在缓冲输出。在下面的示例中,“ehlo”命令被忽略(服务器没有响应)。但是,当在“ehlo”之后发送其他内容时,例如在另一个调用中的新行,服务器发送响应。fwrite
$errno = '';
$errstr = '';
$timeout = 5;
$streamContext = stream_context_create();
$host = 'ssl://smtp.some.server.com:465';
$stream = stream_socket_client($host, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
stream_set_blocking($stream, 1);
stream_set_timeout($stream, $timeout);
stream_set_write_buffer($stream, 0);
$fgets = fgets($stream);
print_r($fgets);
fwrite($stream, "ehlo [127.0.0.1]\r\n");
$response = '';
do {
$line = fgets($stream);
$response .= $line;
} while (null !== $line && false !== $line && ' ' != $line{3});
print_r($response);
fclose($stream);
我有一个回应:
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.
(它来自第一个)。print_r
但是当在行之后:我添加额外的套接字写入:输出是可以的:fwrite($stream, "ehlo [127.0.0.1]\r\n");
fwrite($stream, "\n");
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.
250-epicserver.net.pl Hello ip-166-242.pl [94.183.162.232], pleased to meet you
250-PIPELINING
250-ENHANCEDSTATUSCODES
250-SIZE
250-8BITMIME
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250 HELP
我尝试使用stunnel来检查它是否是PHP SSL包装器问题,当我切换到(我的stunnel配置)时,一切都可以完美地工作(无需添加该特殊方法)。$host
$host = 'localhost:110;'
fwrite
有人遇到过这个问题吗?