Как проверить, поддерживает ли curl для ssl?

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

если (extension_loaded ( 'завиток'))

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

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

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

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

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

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

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

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

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

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 ?> 

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

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

 <? php phpinfo(); ?> 

Я не уверен, что это хорошая идея пойти с curl_version()['ssl_version'] (например, if (stripos(curl_version()['ssl_version'], "openssl") !== false) { ), поскольку curl говорит здесь 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."; } 

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

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