2011-04-24 96 views
7

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

如果(extension_loaded(“卷曲”))

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

+0

你可能只是测试它反对说'https://开头google.com',如果卷曲失败,那么你就可以捕获错误,并知道它是没有安装。 (没有线索,如果这实际上可行) – Ben 2011-04-24 22:02:53

+0

我正在寻找一些类似于extension_loaded()的编程解决方案,或者可能测试是否有某个常量可用。 – Dmitri 2011-04-24 22:12:10

回答

10

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(整数)

1

检查输出stream_get_wrappers()如果https在你的名单中你很好去。

4

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

Upvoted。这比接受的答案简单。 – GetFree 2014-12-19 12:17:43

1

如果你在一个PHP文件中把这个代码,你将能够看到所有的细节PHP在浏览器中:

<? php 

phpinfo(); 

?> 
0

如果扩展openssl被加载,那么cURL可以使用它。

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

    return 'http'; 
} 
1

我不知道这是否是好主意,去与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."; 
}