2011-04-24 16 views
7

¿Cómo puedo comprobar si php curl se compiló con ssl y tiene soporte para ssl? Es decir, una simple comprobación para ver si la curvatura está disponible sería:¿Cómo comprobar si curl tiene soporte para ssl?

si (extension_loaded ('rizo'))

pero ¿cómo puedo comprobar si la curvatura también tiene soporte para SSL? Necesito este control porque se necesita soporte SSL para usar la API basada en oauth2 y necesito una forma de verificar rápidamente si el php del cliente es capaz de usar oauth2 antes de usarlo (y fallar)

+0

Se podía probarlo en contra dicen 'https: // google.com', si falla rizo, entonces se puede detectar el error, y saber que no está instalado . (no tengo idea si esto realmente funcionaría) – Ben

+0

Estoy buscando alguna solución programática similar a la extensión_cargada() o tal vez para probar si alguna constante está disponible. – Dmitri

Respuesta

10

Ver http://www.php.net/manual/en/function.curl-version.php

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

En la versión $ [ ''] características que tiene una máscara de bits características. Mediante una operación y entre esta máscara de bits y la constante adecuada, puede verificar si una función está habilitada.

constantes posibles son:

CURL_VERSION_IPV6 (integer)

CURL_VERSION_KERBEROS4 (integer)

CURL_VERSION_SSL (integer)

CURL_VERSION_LIBZ (integer)

1

Compruebe la salida de stream_get_wrappers() si https está en la lista, eres bueno para ir.

4

AFAIK cURL no tiene una manera de verificar si SSL está habilitado o deshabilitado, probarlo y detectarlo te lo haría saber con certeza.

Puede intentar probar esto, para ver si funciona. (No tengo un servidor sin SSL para probar el ..)

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

Votación máxima. Esto es más simple que la respuesta aceptada. – GetFree

1

Si coloca este código en un archivo PHP, usted será capaz de ver todos los detalles para PHP en el navegador:

<? php 

phpinfo(); 

?> 
0

Si la extensión openssl está cargada, entonces cURL puede usarla.

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

    return 'http'; 
} 
1

No estoy seguro de si es buena idea ir con curl_version()['ssl_version'], (por ejemplo if (stripos(curl_version()['ssl_version'], "openssl") !== false) {) como rizo dice aquí http://curl.haxx.se/docs/faq.html#Does_curl_work_build_with_other se puede utilizar otra biblioteca SSL de OpenSSL (que no tiene nada que ver con eso la extensión openssl separada, curl tiene su propia biblioteca openssl) tal como se describe aquí http://curl.haxx.se/libcurl/c/curl_version_info.html parece mejor ir con la verificación de máscara de bits CURL_VERSION_SSL en lugar de curl_version()['ssl_version']. Tenga en cuenta que no todas esas constantes indicadas en el sitio oficial CURL están disponibles en php, pero sólo estas cuatro constantes:

[CURL_VERSION_IPV6] => 1 
[CURL_VERSION_KERBEROS4] => 2 
[CURL_VERSION_SSL] => 4 
[CURL_VERSION_LIBZ] => 8 

He probado esto en Windows mediante la desactivación de extensión "OpenSSL" en php.ini y se dio cuenta rizo no tiene nada para hacer con esa extensión de openssl separada, pero tiene su propio openssl, en otras palabras, deshabilitar la extensión de openssl no afecta a $ v ['ssl_version'] ;. Entonces, si desea comprobar si curl tiene soporte para ssl, no debe confiar en la existencia de esa extensión de openssl separada y más arriba le expliqué que tampoco debe confiar en curl_version()['ssl_version'].La única manera confiable es CURL_VERSION_SSL comprobación de máscara de bits:

if (!curl_version()['features'] & CURL_VERSION_SSL) { 
    echo "SSL is not supported with this cURL installation."; 
} 
Cuestiones relacionadas