2011-04-24 4 views
7

Comment puis-je vérifier si php curl a été compilé avec ssl et supporte ssl? Je veux dire, une simple vérification pour voir si le froissement est disponible serait:Comment vérifier si curl prend en charge ssl?

si (extension_loaded (« boucle »))

mais comment puis-je vérifier si le froissement supporte également ssl? J'ai besoin de cette vérification car la prise en charge SSL est nécessaire pour utiliser API basée sur oauth2 et j'ai besoin d'un moyen de vérifier rapidement si le php du client est capable de l'oauth2 avant de l'utiliser (et échouer)

+0

On peut tester contre dire: https: // google.com', si le froissement échoue, vous pouvez attraper l'erreur, et le savoir est pas installé . (Je n'ai aucune idée si cela fonctionnerait réellement) – Ben

+0

Je cherche une solution programmatique similaire à extension_loaded() ou peut-être pour tester si une constante est disponible. – Dmitri

Répondre

10

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

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

Dans la version $ [ 'caractéristiques'] vous avez une des caractéristiques bitmask. Grâce à une opération et entre ce masque et la constante appropriée, vous pouvez vérifier si une feture est activée.

constantes possibles sont:

CURL_VERSION_IPV6 (entier)

CURL_VERSION_KERBEROS4 (entier)

CURL_VERSION_SSL (entier)

CURL_VERSION_LIBZ (entier)

1

Vérifiez la sortie de stream_get_wrappers() si https est dans la liste, vous êtes bon à faire.

4

AFAIK cURL n'a pas un moyen de vérifier si le SSL est activé ou désactivé, le tester et l'attraper vous le feraient savoir à coup sûr.

Vous pourriez essayer ceci, pour voir si cela fonctionne. (Je n'ai pas un serveur sans SSL pour tester sur ..)

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

Refusée. C'est plus simple que la réponse acceptée. – GetFree

1

Si vous mettez ce code dans un fichier PHP, vous serez en mesure de voir tous les détails de PHP dans le navigateur:

<? php 

phpinfo(); 

?> 
0

Si l'extension openssl est chargée, alors cURL peut l'utiliser.

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

    return 'http'; 
} 
1

Je ne sais pas si elle est bonne idée d'aller avec curl_version()['ssl_version'], (par exemple if (stripos(curl_version()['ssl_version'], "openssl") !== false) {) comme boucle dit ici http://curl.haxx.se/docs/faq.html#Does_curl_work_build_with_other il peut utiliser d'autres bibliothèques ssl que OpenSSL (qui n'a rien à voir avec cette extension openssl séparée, curl a sa propre bibliothèque openssl) comme décrit ici http://curl.haxx.se/libcurl/c/curl_version_info.html il semble préférable d'aller avec CURL_VERSION_SSL vérifier le masque de bit plutôt que curl_version()['ssl_version']. Notez que toutes les constantes indiquées sur le site Web de cURL officiel sont disponibles en php, mais seulement ces quatre constantes:

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

J'ai testé ce sous Windows en désactivant l'extension « OpenSSL » dans php.ini et remarqué boucle n'a rien à faire avec cette extension openssl séparée mais elle a son propre openssl, en d'autres termes, la désactivation de l'extension openssl n'affecte pas $ v ['ssl_version'] ;. Donc, si vous voulez vérifier si curl a un support pour ssl, vous ne devriez pas compter sur l'existence de cette extension openssl séparée et au-dessus j'ai expliqué que vous ne devriez pas compter sur curl_version()['ssl_version'] non plus.Le seul moyen fiable est CURL_VERSION_SSL vérification de bitmask:

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