如何检查php curl是否使用ssl编译并支持ssl? 我的意思是,一个简单的检查,看看卷曲是否可用将是:
如果(extension_loaded( '卷曲'))
但是如何检查curl是否也支持ssl?我需要这个检查,因为使用基于oauth2的API需要ssl支持,我需要一些方法来快速检查客户端的php是否能够在实际使用它之前能够使用oauth2(并且失败)
答案 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';
}