如何检查curl是否支持ssl?
如何检查php curl是否使用ssl编译并支持ssl? 我的意思是,一个简单的检查,看看是否卷曲可为:如何检查curl是否支持ssl?
如果(extension_loaded(“卷曲”))
但我要如何检查是否卷曲也有SSL支持?我需要这个检查,因为需要ssl支持来使用基于oauth2的API,并且我需要一些方法来快速检查客户端的php是否能够在实际使用oauth2之前(和失败)
见http://www.php.net/manual/en/function.curl-version.php
$version = curl_version();
$ssl_supported= ($version['features'] & CURL_VERSION_SSL);
在$版本[ '功能']你有一个功能位掩码。通过此位掩码和适当的常量之间的操作,您可以检查是否启用了捕获。
可能的常数是:
CURL_VERSION_IPV6(整数)
CURL_VERSION_KERBEROS4(整数)
CURL_VERSION_SSL(整数)
CURL_VERSION_LIBZ(整数)
检查输出stream_get_wrappers()
如果https在你的名单中你很好去。
AFAIK卷曲不具有一种检查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
?>
Upvoted。这比接受的答案简单。 – GetFree 2014-12-19 12:17:43
如果你在一个PHP文件中把这个代码,你将能够看到所有的细节PHP在浏览器中:
<? php
phpinfo();
?>
如果扩展openssl被加载,那么cURL可以使用它。
function getScheme()
{
if (extension_loaded('openssl')) {
return 'https';
}
return 'http';
}
我不知道这是否是好主意,去与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的(它没有任何与该curl有它自己的openssl库) 如这里所述http://curl.haxx.se/libcurl/c/curl_version_info.html用CURL_VERSION_SSL位掩码检查而不是curl_version()['ssl_version']
更好。请注意,并非所有的官方网站上卷曲的规定常量的PHP中使用,但只有这四个常数:
[CURL_VERSION_IPV6] => 1
[CURL_VERSION_KERBEROS4] => 2
[CURL_VERSION_SSL] => 4
[CURL_VERSION_LIBZ] => 8
我测试了在Windows上通过禁用在php.ini为“OpenSSL”延伸,并注意到卷曲无关与分离的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.";
}
你可能只是测试它反对说'https://开头google.com',如果卷曲失败,那么你就可以捕获错误,并知道它是没有安装。 (没有线索,如果这实际上可行) – Ben 2011-04-24 22:02:53
我正在寻找一些类似于extension_loaded()的编程解决方案,或者可能测试是否有某个常量可用。 – Dmitri 2011-04-24 22:12:10