Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fsockopen ssl连接不工作_Php_Openssl_Fsockopen - Fatal编程技术网

Php fsockopen ssl连接不工作

Php fsockopen ssl连接不工作,php,openssl,fsockopen,Php,Openssl,Fsockopen,我正在尝试在smtp服务器上使用php函数fsockopen,在apache本地服务器的端口465上使用ssl。 它与php命令行配合得很好,但是当脚本在我的浏览器中运行时,我遇到了一个SSL错误 php.ini extension=php\u openssl.dll行未注释 phpinfo通过Apache 加载的配置文件:D:\localhost\php-5.4.11\php.ini openssl 已启用OpenSSL支持 OpenSSL库版本OpenSSL 0.9.8x 2012年5月1

我正在尝试在smtp服务器上使用php函数fsockopen,在apache本地服务器的端口465上使用ssl。 它与php命令行配合得很好,但是当脚本在我的浏览器中运行时,我遇到了一个SSL错误

php.ini

extension=php\u openssl.dll行未注释
phpinfo通过Apache

加载的配置文件:D:\localhost\php-5.4.11\php.ini
openssl
已启用OpenSSL支持
OpenSSL库版本OpenSSL 0.9.8x 2012年5月10日
OpenSSL标头版本OpenSSL 0.9.8x 2012年5月10日
带命令行的phpinfo

Loaded配置文件=>D:\localhost\php-5.4.11\php.ini
openssl
OpenSSL支持=>已启用
OpenSSL库版本=>OpenSSL 0.9.8x 2012年5月10日
OpenSSL头版本=>OpenSSL 0.9.8x 2012年5月10日
我的剧本

$smtp=fsockopen('ssl://in.mailjet.com“,465,$errno,$errstr,30);
$response=fgets($smtp,4096);
如果(空($smtp)){
回音$应答;
返回false;
}
回音$response
; fclose(smtp美元);
apache下的输出

警告:fsockopen():SSL:第2行XXX中的加密启用超时
警告:fsockopen():无法在第2行的XXX中启用加密
警告:fsockopen():无法连接到ssl://in.mailjet.com:465 第2行XXX中的(未知错误)
使用命令行输出

220 srv12.mailjet.com ESMTP mailjet

平台:我在Windows864上使用PHP5.4.11/Apache2.2.22(Win32)

--编辑-- 我已尝试按照建议使用TLS:

$smtp=fsockopen('tls://in.mailjet.com“,567,$errno,$errstr,30);
我得到

E_警告:fsockopen():在第XXX行的XXX中

错误消息为空,并且
$errno=(int)0
$errstr=(string)'

我将Apache版本从2.2更新为2.4,现在可以运行了


我遵循了本教程:获取新的Apache版本。

我在使用captcha的联系人表单中遇到了类似的问题,因此出现了错误

fsockopen():无法连接到ssl://mail.google.com:443
这是一个安装了Joomla的FreeBSD虚拟机

搜索时,我找到了提到证书验证的内容


安装了FreeBSD端口
ca_root\u nss
,其中包括对来自Mozilla nss库中的证书颁发机构的根证书进行证书验证。

您可能希望使用类似库的方法,而不是滚动您自己的SMTP客户端。但是,请尝试使用
tls://
包装而不是
ssl://
。如果不起作用,请尝试使用
tcp://
包装器进行连接,并使用
stream\u socket\u enable\u crypto()
在流上手动启用加密。错误消息表示发生了超时-启动脚本后多长时间会收到错误消息(即超时多长?)我尝试了以下方法:
code
fsockopen('tls://in.mailjet.com“,567,$errno,$errstr,30)<代码>代码我收到了E_警告:fsockopen():在XXX行的XXX中,您收到了一条空白的错误消息?@DaveRandom超时时间为30秒,如fsockopen的第5个参数中指定的。由于CLI版本中的脚本速度很快,我将其缩短为5秒,并且在刷新浏览器中的页面大约5秒后出现错误。我用tcp://包装器试试你的提示,然后拿着它回来feedbacks@DaveRandom是的,我收到一条空白的错误消息,这让人困惑。参数3和4返回:$errno=(int)0和$errstr=(string)'