Как проверить, скомпилирован ли 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'; }