我试过:
$host = 'ssl://fbcdn-sphotos-c-a.akamaihd.net';
$port = 443;
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp) {
var_dump($errno, $errstr);
} else {
echo 'Connected';
}和:
$host = 'ssl://fbcdn-sphotos-c-a.akamaihd.net:443';
$fp = stream_socket_client($host, $errno, $errstr, 30);
if (!$fp) {
var_dump($errno, $errstr);
} else {
echo 'Connected';
}但这两项回报:
int(0)
string(0) ""好像我还没能联系上。
注意:在php5.4中,奇怪地工作得很完美。
这个版本的PHP中有bug吗?
详细信息:
PHP 5.4.12
注册流套接字传输: tcp、udp、ssl、sslv3、sslv2、tls 编译器: MSVC9 (Visual C++ 2008) 体系结构: x64 配置命令(编译): cscript /nologo configure.js --启用-嵌入“-gettext=shared“-with-m散列"--with-ldap=shared”-启用-com-dotnet=shared“--启用-soap=shared”-启用-shmop=shared“-with-gmp=shared”-with-interbase=shared“-with-pdo-firebird=shared”-with-sqlite 3=shared“-with--gettext=shared-odbc=shared”-pdo-odbc=shared“-with oci=C:\php-sdk\oracle\x64\instantclient_10_2\sdk,共享“"--with-oci8=C:\php-sdk\oracle\x64\instantclient_10_2\sdk,共享”"--with-oci8-11g=C:\php-sdk\oracle\x64\instantclient_11_2\sdk,共享““-”-启用 OpenSSL OpenSSL支持:已启用 OpenSSL图书馆版本: OpenSSL 1.0.1c 2012年5月10日 OpenSSL报头版本: OpenSSL 1.0.1e 2013年2月11日
PHP 5.6.26
注册流套接字传输: tcp、udp、ssl、sslv3、tls、tlsv1.0、tlsv1.1、tlsv1.2 编译器: MSVC11 (Visual C++ 2012) 体系结构: x64 配置命令(编译): cscript "--with-pdo-oci=c:\php-sdk\oracle\x64\instantclient_12_1\sdk,/nologo configure.js??启用-快照-构建“”??禁用-isapi“”??启用-调试-包“共享“--启用-对象-out-dir=./obj/”--启用-com-dotnet=共享“-with-mcrypt=静态” OpenSSL OpenSSL支持:已启用 OpenSSL图书馆版本: OpenSSL 1.0.1c 2012年5月10日 OpenSSL标头版本: OpenSSL 1.0.1t 2016年5月3日 Openssl默认配置: c:/openssl-1.0.1c-X64/ssl/openssl.cnf openssl.cafile:无值 openssl.capath:无值
发布于 2016-10-02 01:16:10
即使PHP5.5证书在PHP中也以某种方式工作,但在PHP 5.6之后,这一点已经改变了,如以下所述:http://php.net/manual/en/migration56.openssl.php
所有加密的客户端流现在默认启用对等验证。默认情况下,这将使用OpenSSL的默认CA包来验证对等证书。在大多数情况下,不需要进行任何更改来与具有有效SSL证书的服务器通信,因为分发服务器通常将OpenSSL配置为使用已知的良好CA包。
默认的CA包可以通过设置openssl.cafile或openssl.capath配置设置在全局基础上重写,也可以通过使用cafile或capath上下文选项根据每个请求重写。
虽然一般不推荐,但可以通过将verify_peer上下文选项设置为FALSE来禁用请求的对等证书验证,并通过将verify_peer_name上下文选项设置为FALSE来禁用对等名称验证。
fsockopen尝试使用cafile解析连接,如果没有配置php.ini,则显示错误0。您可以尝试两种解决方案:
fsockopen是可能的,但您可以使用fopen+stream_context_create,也可以使用stream_socket_client。
注意:有时服务器会阻塞访问urls的fopen和file_get_contents等功能。示例:
如果您决定出于任何原因需要禁用检查,只需这样做:
发布于 2016-09-25 14:10:25
client
如果
errno中返回的值是0,而函数返回的是FALSE,则表示错误发生在系统级connect()调用之前。这很可能是因为初始化套接字时出现了问题。
https://stackoverflow.com/questions/39687720
复制相似问题