如何检查curl是否支持ssl?

时间:2011-04-24 21:59:37

标签: php ssl curl

如何检查php curl是否使用ssl编译并支持ssl? 我的意思是,一个简单的检查,看看卷曲是否可用将是:

如果(extension_loaded( '卷曲'))

但是如何检查curl是否也支持ssl?我需要这个检查,因为使用基于oauth2的API需要ssl支持,我需要一些方法来快速检查客户端的php是否能够在实际使用它之前能够使用oauth2(并且失败)

6 个答案:

答案 0 :(得分:11)

请参阅http://www.php.net/manual/en/function.curl-version.php

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

在$ version ['features']中你有一个功能位掩码。通过此位掩码和适当的常量之间的操作和操作,您可以检查是否启用了一个胎儿。

可能的常数是:

CURL_VERSION_IPV6(整数)

CURL_VERSION_KERBEROS4(整数)

CURL_VERSION_SSL(整数)

CURL_VERSION_LIBZ(整数)

答案 1 :(得分:4)

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

答案 2 :(得分:1)

如果https位于您要去的列表中,请检查stream_get_wrappers()的输出。

答案 3 :(得分:1)

如果您将此代码放在PHP文件中,您将能够在浏览器中查看PHP的所有详细信息:

<? php

phpinfo();

?>

答案 4 :(得分:1)

我不确定与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

我通过禁用&#34; openssl&#34;在Windows上对此进行了测试php.ini中的扩展和注意到的curl与分离的openssl扩展无关,但它有自己的openssl,换句话说,禁用openssl扩展不会影响$ v [&#39; ssl_version&#39;] ;.因此,如果你想检查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.";
}

答案 5 :(得分:0)

如果加载了扩展名openssl,则cURL可以使用它。

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

    return 'http';
}