我无法使用ssl://方案打开网址。详图:
phpinfo()
:http://pastie.org/2391404
示例代码:
$socket = @fsockopen("ssl://cgw.ubb.bg", 443, $errno, $errstr, 30);
if (!$socket) {
$err = "$errstr ($errno) - " . $socket;
echo "Unable to connect. $err";
} else {
echo "Connected.";
fclose($socket);
}
echo PHP_EOL;
我得到的回应是:
Unable to connect. (0) -
(是的,我确实尝试连接telnet / browser / etc.,主机/端口组合不是问题。)
换句话说,errno为0,并且没有提供错误消息。
当我把它放在/opt/lampp/etc/php.ini
:
extension="openssl.so"
我收到此错误:
Warning: PHP Startup: Unable to load dynamic library '/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/openssl.so' - /opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0
唉,那里确实没有openssl.so
个文件。
我的XAMPP平台是:i686-pc-linux-gnu
。
我的问题是:
我可以通过下载正确的文件以某种方式“欺骗”并完成吗? 如果没有,我怎么能从源代码编译它并将它集成到XAMPP中而不将其拆开?
修改 到目前为止,没有可行的建议,这是一种耻辱。考虑到我使用了现成的XAMPP安装(基本上解压缩了存档)并且XAMPP被广泛使用,我很惊讶没有其他人偶然发现这个问题。
答案 0 :(得分:1)
在debian上调试这个问题几个小时之后(安装了libssl0.9.8)我找到了一个解决方案。 我使用的是dotdeb.org php版本:php5-cgi 5.3.13-1~dotdeb.0(似乎不适用于debian默认包5.3.3-7 + squeeze13! - 此版本中仍然缺少no_ticket )。
解决方案是打开这样的套接字:
<?php
$host = "ssl://cgw.ubb.bg";
$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'no_ticket',true);
$socket = stream_socket_client($host.':443', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
之后你只需使用套接字,因为它是一个fsockopen资源。
答案 1 :(得分:0)
从你的phpinfo(),openssl可用:
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.0c 2 Dec 2010
OpenSSL Header Version => OpenSSL 1.0.0c 2 Dec 2010
PHP允许将openssl构建到核心中,在这种情况下,它不需要在单独的扩展中。 file_get_contents(“https://cgw.ubb.bg/”)是否会给出相同的错误?
编辑:这似乎是openssl中的一个错误:我尝试了我提供的示例,并收到以下错误:
error:140773F2:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert unexpected message
在谷歌搜索后,我发现多个错误报告/论坛帖子似乎都说这是openssl lib和远程服务器之间的问题。显然,强制openssl到sslv3纠正了这个问题,但我不知道怎么用php做这个。
一些错误报告(与php无关):