Как проверить, есть ли в curl поддержка ssl? - PullRequest
8 голосов
/ 25 апреля 2011

Как я могу проверить, был ли php curl скомпилирован с ssl и есть ли поддержка ssl?Я имею в виду, простая проверка, чтобы увидеть, доступен ли curl:

if (extension_loaded ('curl'))

но как мне проверить, есть ли в curl поддержка ssl?Мне нужна эта проверка, потому что поддержка ssl необходима для использования API на основе oauth2, и мне нужен какой-то способ, чтобы быстро проверить, способен ли php клиента к oauth2, прежде чем его использовать (и не удается)

Ответы [ 6 ]

11 голосов
/ 25 апреля 2011

См. http://www.php.net/manual/en/function.curl-version.php

$version = curl_version();
$ssl_supported= ($version['features'] & CURL_VERSION_SSL);

В $ version ['features'] у вас есть битовая маска функций. С помощью операции and между этой битовой маской и соответствующей константой вы можете проверить, включена ли функция.

Возможные константы:

CURL_VERSION_IPV6 (целое число)

CURL_VERSION_KERBEROS4 (целое число)

CURL_VERSION_SSL (целое число)

CURL_VERSION_LIBZ (целое число)

4 голосов
/ 25 апреля 2011

AFAIK cURL не может проверить, включен ли SSL или отключен, его тестирование и отловка дадут вам знать наверняка.

Вы можете попробовать проверить это, чтобы увидеть, работает ли оно. (У меня нет сервера без SSL для тестирования ..)

<?php
$v = curl_version(); 
print $v['ssl_version']; // I get: OpenSSL/0.9.8 - I presume you won't if it is not enabled
?>
1 голос
/ 30 июля 2015

Я не уверен, стоит ли идти с curl_version()['ssl_version'], (например, if (stripos(curl_version()['ssl_version'], "openssl") !== false) {) как здесь говорится в локоне http://curl.haxx.se/docs/faq.html#Does_curl_work_build_with_other он может использовать другую библиотеку ssl, кроме OpenSSL (которая не имеет ничего общего с этим отдельным расширением openssl, curl имеет свою собственную библиотеку openssl) поэтому, как описано здесь http://curl.haxx.se/libcurl/c/curl_version_info.html, лучше использовать проверку битовой маски CURL_VERSION_SSL, а не curl_version()['ssl_version']. Обратите внимание, что не все из этих констант, указанных на официальном сайте cURL, доступны в php, но только эти четыре константы:

[CURL_VERSION_IPV6] => 1
[CURL_VERSION_KERBEROS4] => 2
[CURL_VERSION_SSL] => 4
[CURL_VERSION_LIBZ] => 8

Я протестировал это в Windows, отключив расширение "openssl" в php.ini и заметил, что curl не имеет ничего общего с этим отдельным расширением openssl, но у него есть свой собственный openssl, другими словами, отключение расширения openssl не влияет на $ v [ 'ssl_version'] ;. Поэтому, если вы хотите проверить, есть ли в curl поддержка ssl, вам не следует полагаться на существование этого отдельного расширения openssl, и, как я объяснил выше, вы не должны полагаться и на curl_version()['ssl_version']. Единственный надежный способ - проверка битовой маски CURL_VERSION_SSL:

if (!curl_version()['features'] & CURL_VERSION_SSL) {
    echo "SSL is not supported with this cURL installation.";
}
1 голос
/ 07 июня 2012

Если вы поместите этот код в файл PHP, вы сможете увидеть все детали для PHP в браузере:

<? php

phpinfo();

?>
1 голос
/ 25 апреля 2011

Проверьте вывод stream_get_wrappers(), если https находится в списке, вы можете пойти.

0 голосов
/ 31 января 2015

Если расширение openssl загружено, тогда cURL может использовать его.

function getScheme()
{
    if (extension_loaded('openssl')) {
        return 'https';
    }

    return 'http';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...