2011-08-18 49 views
2

我無法使用ssl://方案打開網址。詳圖:Debian 6下的XAMPP:無法打開「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 /瀏覽器等,主機/端口組合不是問題。)

換句話說,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

從你的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 

Google上搜尋它,我找到了多個錯誤報告/論壇的帖子,所有的似乎後說這是openssl lib和遠程服務器之間的問題。顯然,強制openssl sslv3糾正了這個問題,但我不知道如何用php做到這一點。

一些錯誤報告(不涉及PHP):

https://bugs.launchpad.net/ubuntu/+source/curl/+bug/595415

http://forum.parallels.com/printthread.php?t=82502

+0

對不起,這需要幾天,一直很忙。嘗試你的代碼片段,這裏是響應: '錯誤:140773F2:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警告第3行test1.php中的意外消息' '警告:file_get_contents():無法在test1.php中啓用加密上線3' '警告:的file_get_contents(https://cgw.ubb.bg/):未能打開流:操作test1.php失敗上線3' 的行是: '$數據=的file_get_contents ('https://cgw.ubb.bg/');' 你能幫忙嗎?我現在要去看看這些錯誤。 – dimitarvp

+0

可悲的是這些鏈接無濟於事。 :/ – dimitarvp

+0

畢竟,我最終直接在實時服務器上編寫了我需要的功能(問題不存在)。儘管我在Google上花費了數小時,但仍無法找到任何解決方案。標記爲答案,因爲即使它沒有解決任何問題,它至少包含一些信息。 ;) – dimitarvp

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。