套接字连接在php脚本中失败,而它在终端中工作

时间:2013-09-27 14:01:10

标签: php sockets ssl

这是我的剧本

<?php
    $timeout = 10;
    $target = "tls://testbed-epp.nominet.org.uk:700";

    $result = stream_socket_client($target, $errno, $errstr, 30, STREAM_CLIENT_CONNECT);
    if ($result === False) {
        throw new Exception("Error connecting to $target: $errstr (code $errno)");

    }

    echo "Connected";

它会引发异常

Error connecting to tls://testbed-epp.nominet.org.uk:700: (code 0)

还有警告

WARNING: stream_socket_client(): Failed to enable crypto

同时运行

 openssl s_client -connect testbed-epp.nominet.org.uk:700

在一个终端连接完美。

任何想法都将受到赞赏

3 个答案:

答案 0 :(得分:1)

请改为尝试:

$result = stream_socket_client("testbed-epp.nominet.org.uk:700", $errno, $errstr);

编辑:你也可以通过 stream_socket_enable_crypto()函数设置安全连接,但是你应该注意它必须在套接字连接初始化后使用。

答案 1 :(得分:1)

好吧,我在我的apache服务器上测试了你的代码,它运行正常。你能检查一下你的apache配置吗?在配置中有一个名为"Registered Stream Socket Transports "的参数。只需检查tls是否存在作为值,否则还有其他一些问题,但它绝对不是您的脚本

答案 2 :(得分:0)

$timeout =- 10;
          ^----

您将$timeout设为负10秒。例如你可以在它开始之前杀死连接尝试。