XAMPP под Debian 6: не может открыть URL "ssl: //" - PullRequest
2 голосов
/ 19 августа 2011

У меня проблемы с открытием URL по схеме 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., Комбинация хост / порт не является проблемой.)

Другими словами, errno0 и сообщение об ошибке не предоставляется.

Когда я вставляю это в /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 довольно широко используется, я очень удивлен, что никто другой не наткнулся на эту проблему.

Ответы [ 2 ]

1 голос
/ 12 июня 2012

Потеряв несколько часов на отладку этой проблемы в Debian (squeeze с установленной libssl0.9.8), я нашел решение.Я использую php-версию dotdeb.org: 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.

0 голосов
/ 19 августа 2011

Из вашего 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 в ядро, и в этом случае он не должен находиться в отдельном расширении. Файл_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

...