php脚本中的套接字连接在终端中工作时失败
这就是我的剧本php脚本中的套接字连接在终端中工作时失败,php,sockets,ssl,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 connec
<?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";
还有一个警告
WARNING: stream_socket_client(): Failed to enable crypto
同时跑
openssl s_client -connect testbed-epp.nominet.org.uk:700
在一个终端连接完美
如有任何意见,将不胜感激
$timeout =- 10;
^----
您正在将$timeout
设置为负10秒。e、 g.您在连接尝试开始之前就停止了连接尝试。请尝试以下操作:
$result = stream_socket_client("testbed-epp.nominet.org.uk:700", $errno, $errstr);
编辑:您也可以通过stream\u socket\u enable\u crypto()函数设置安全连接,但您应该注意,它必须在socket连接初始化之后使用。好的,我在apache服务器上测试了您的代码,它工作正常。你能检查一下你的apache配置吗。在configs中有一个名为
的参数“Registered Stream Socket Transports”
。只需检查tls
是否作为值存在,否则会有其他问题,但肯定不是您的脚本谢谢您的回复,这是一个输入错误,在原始脚本中是肯定的。所以这不是我害怕的原因,变量没有被使用,而是硬编码的超时时间30
。执行phpinfo()显示注册的流套接字传输tcp、udp、unix、udg、ssl、sslv3、sslv2、tlsok,这很奇怪,但我注意到在您上面的错误中,$errstr
是空的。你应该吃点东西。我尝试更改端口,但它拒绝了连接。类似地,您应该为这个错误准备一些东西——它是空的,错误代码是0。在我的原始脚本上,错误日志记录捕捉到一个警告-警告:stream\u socket\u client():无法启用加密。我更新了问题。测试脚本中没有显示警告的原因可能是我通过命令行运行了警告。您的配置中是否启用了openssl
扩展?我刚刚意识到我已经在apache上启用了openssl支持。它已经启用了。如果您谈论的是httpd.conf loadmodule,那么它可以在不指定协议的情况下工作。问题是我无法编辑该文件,因为它是第三方库。除此之外,同一个脚本在另一台服务器上也可以正常工作,因此我认为服务器配置中存在一些问题。我最初担心的是,在安装在远程服务器的VM节点上的VPN客户端上运行。但事实证明,这不是问题所在
$result = stream_socket_client("testbed-epp.nominet.org.uk:700", $errno, $errstr);