我从使用CURL通过SSL请求URI的PHP组件遇到以下错误:
cURL error 35: gnutls_handshake() failed: A TLS packet with unexpected length was received.
Run Code Online (Sandbox Code Playgroud)
此错误发生在travis-ci.org环境中,但不在我们的任何测试环境中.见travis-ci build 144663700.
我发现在Travis worker中运行的PHP版本在"Ubuntu 12.04.5 LTS"上再次编译为"GnuTLS/2.12.14",在"Ubuntu 14.04.3 LTS"上再次编译为"GnuTLS/2.12.23".
在我们的开发环境中,我们使用在Debian(各种版本)上针对"OpenSSL/1.0.1t"编译的标准包.
因此,我认为问题与"GnuTLS/2.12.14"或"GnuTLS/2.12.23"或它们编译的参数有关.
我尝试使用CURL常量CURLOPT_SSLVERSION来限制SSL版本,但这并没有解决问题.
根据www.ssllabs.com,有问题的主机 - api.reporting.cloud - 支持TLS 1.2,TLS 1.1和TLS 1.0.
有人会对我有任何提示或指示吗?
我正在使用Symfony\Component\Console\Output\ConsoleOutput写入控制台.
明确地说,我写信给php://stdout.
在我的单元测试中,我希望能够检查输出到控制台.
使用PHPUnit方法expectOutputString(),我可以检查输出:
// Passes, as expected
public function testOutputBufferingEcho()
{
$this->expectOutputString('Hello');
echo 'Hello';
}
Run Code Online (Sandbox Code Playgroud)
这也适用于输出php://output:
// Passes, as expected
public function testOutputBufferingOutput()
{
$this->expectOutputString('Hello');
$out = fopen('php://output', 'w');
fputs ($out, 'Hello');
fclose($out);
}
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于输出php://stdout(ConsoleOutput默认情况下使用的输出):
// Failed asserting that two strings are equal.
// --- Expected
// +++ Actual
// @@ @@
// -'Hello'
// +''
public function testOutputBufferingStdOut()
{
$this->expectOutputString('Hello');
$out = fopen('php://stdout', 'w');
fputs ($out, …Run Code Online (Sandbox Code Playgroud)