小编Jon*_*ron的帖子

cURL错误35:gnutls_handshake()失败

我从使用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.

有人会对我有任何提示或指示吗?

php curl travis-ci gnutls

13
推荐指数
2
解决办法
1万
查看次数

使用PHPUnit测试输出到php:// stdout

我正在使用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)

php phpunit stdout

6
推荐指数
1
解决办法
3069
查看次数

标签 统计

php ×2

curl ×1

gnutls ×1

phpunit ×1

stdout ×1

travis-ci ×1