web-dev-qa-db-fra.com

Impossible de trouver le wrapper "https" - avez-vous oublié de l'activer lorsque vous avez configuré PHP?

Le problème est dans la question. J'ai fait une recherche approfondie pour trouver des solutions à ce problème et je sais qu'il existe des sujets sur ce sujet. Je les ai suivis aussi et rien n'a fonctionné. Cela étant dit, je vais énumérer exactement tout ce que j'ai fait jusqu'à présent. J'utilise PHP 5.2.14 avec Zend Debugging sur la dernière version d'Eclipse sur mon ordinateur Windows XP. J'ai 1 Go de RAM. J'ai XAMPP sous Apache, MySQL et FileZilla installé. 

Sur XAMPP, j’ai effectué les opérations suivantes (Apache étant désactivé lors de ces modifications): Cliquez sur Admin dans le panneau de configuration de XAMPP et passez à https:// localhost/xampp/. De là, j'ai accepté les certs de cette ligne sur la page d'accueil:

Pour le support OpenSSL, veuillez utiliser le certificat de test avec https: // 127.0.0.1 ou https: // localhost.

Sur cette même section, j'ai coché phpinfo(). Sous 'Environnement', SERVER["HTTPS"] est on. Sous 'Environnement Apache', HTTPS est On. Sous 'Variables PHP, _SERVER["HTTPS"] est On. Sous 'Phar', OpenSSL support est disabled (install ext/openssl). Je ne sais pas comment activer celui de Phar.

En ce qui concerne les fichiers eux-mêmes dans C:\xampp, je suis allé dans le dossier PHP. Sous les fichiers de production et de développement php.ini (mieux vaut prévenir que guérir), j'ai allow_url_fopen=On, allow_url_include=On et j'ai supprimé le point-virgule, de sorte que extension=php_openssl.dll n'est plus commenté. J'ai même confirmé que le fichier .dll se trouvait dans le dossier ext du dossier PHP. Libeay32.dll et ssleay32.dll se trouvent dans les dossiers PHP et Apache. Le dossier Apache ne contient aucun fichier php.ini productif ou en développement.

Je suis allé à http://www.slproweb.com/products/Win32OpenSSL.html et j'ai installé Win32 OpenSSL v1.0.0d pour prendre des mesures en toute sécurité.

Maintenant, la ligne de code en question dans le fichier retrieve_website.php ressemble à ceci:

$urlquery = "https://www.googleapis.com/customsearch/v1?key=".$appid."&cx=".$google_searchid."&q=".$query."&alt=atom&num=".$results;
$xmlresults = file_get_contents($urlquery);

J'ai deux autres sites Web que je demande mais ils sont servis via HTTP et ils fonctionnent bien J'ai aussi cette ligne de code entrée vers la fin du script:

echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_dump($w);

Lorsque je l'exécute en tant que script PHP sur Eclipse, tout s'affiche parfaitement comme je le souhaite, avec les résultats suivants:

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(10) {
  [0]=>
  string(5) "https"
  [1]=>
  string(4) "ftps"
  [2]=>
  string(3) "php"
  [3]=>
  string(4) "file"
  [4]=>
  string(4) "data"
  [5]=>
  string(4) "http"
  [6]=>
  string(3) "ftp"
  [7]=>
  string(13) "compress.zlib"
  [8]=>
  string(14) "compress.bzip2"
  [9]=>
  string(3) "Zip"
}

Malgré tous ces changements que j'ai apportés (après avoir démarré Apache), je rencontre toujours les mêmes erreurs la première fois que j'accède à mon script PHP dans Eclipse et Firefox via http: // localhost/tutorial/retrieve_website .php :

Avertissement: file_get_contents () [function.file-get-contents]: Impossible de trouver le wrapper "https" - avez-vous oublié de l'activer lors de la configuration de PHP? dans C:\xampp\htdocs\tutorial\retrieve_website.php à la ligne 29

Avertissement: file_get_contents (https: // www.googleapis.com/customsearch/v1?key=ID d'API supprimé & cx = ID de recherche supprimé & q = Le + diable + est + arrêté + vers + Géorgie & alt = atom & num = 5) [function.file-get-contents]: échec de l'ouverture du flux: Aucun fichier ni répertoire de ce type dans C:\xampp\htdocs\tutorial\retrieve_website.php à la ligne 29

Avertissement: DOMDocument :: loadXML () [domdocument.loadxml]: Chaîne vide fournie comme entrée dans C:\xampp\htdocs\tutorial\retrieve_website.php à la ligne 33

openssl: no wrapper http: yes wrapper https: no wrappers: array (10) {[0] => chaîne (3) "php" [1] => chaîne (4) "fichier" [2] => chaîne (4 ) "glob" [3] => chaîne (4) "données" [4] => chaîne (4) "http" [5] => chaîne (3) "ftp" [6] => chaîne (3) " Zip "[7] => chaîne (13)" compress.zlib "[8] => chaîne (14)" compress.bzip2 "[9] => chaîne (4)" phar "} 

Qu'est-ce que j'ai oublié ou omis de faire? À ma connaissance, j'ai réalisé toutes les recherches sur les technologies HTTPS et OpenSSL.

126
John M

Je l'ai résolu dans XAMPP en décommentant ;extension=php_openssl.dll dans /Apache/bin/php.inimalgré phpinfo () m'indiquant que /php/php.ini était le fichier ini chargé.

EDIT: Je suppose que Ezra answer est la meilleure solution en ajoutant directement la ligne d'extension au fichier ini approprié.

170
kjetilh

J'ai dû ajouter extension=php_openssl.dll à mon fichier php.ini situé dans xampp/php/php.ini. D'une manière ou d'une autre, il n'était pas là, après l'avoir ajouté et redémarré, tout fonctionnait correctement.

91
Ezra

ajoutez simplement deux lignes dans votre fichier php.ini.

extension=php_openssl.dll
allow_url_include = On

ça marche pour moi.

31
Roopchand

Votre Apache n'est probablement pas compilé avec le support SSL. Utilisez quand même cURL au lieu de file_get_contents. Essayez ce code, s'il échoue, j'ai raison.

function curl_get_contents($url)
{
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
  $data = curl_exec($curl);
  curl_close($curl);
  return $data;
}
18
Dejan Marjanovic

J'ai activé l'extension openssl et ça marche pour moi :)

; extension = php_openssl.dll  

à

extension = php_openssl.dll

12
Saran Pal

dans OpenSuse 12.1, la seule chose requise était:

zypper in php5-openssl
6
TheSatinKnight

Dans mon cas, le problème était dû au fait que WAMP utilisait un php.ini différent de celui d'Apache pour la CLI. Par conséquent, vos paramètres définis dans le menu WAMP ne s'appliquent pas à la CLI. Il suffit de modifier le fichier php.ini de la CLI et cela fonctionne.

6
dtbarne

Pour moi je devais décommenter ces lignes dans php.ini:

extension=php_openssl.dll
extension_dir = "ext"

"ext" est applicable si php_openssl.dll est situé dans le dossier "ext".

Note: Je devais le faire pour deux de mes fichiers php.ini, sinon cela ne fonctionnerait pas. L'un situé dans le dossier d'installation vs.php et l'autre dans le dossier PHP

C:\Program Files (x86)\Jcx.Software\VS.Php\2013\Php 5.6
C:\Program Files (x86)\PHP\v5.6

La source

5
zeta

Sur MAC AMPPS, j’ai mis à jour le fichier php-5.5.ini avec ce qui suit.

allow_url_include = On
extension=openssl.so
5
Elye

Vous pouvez utiliser cette fonction à la place.

function get_url_contents($url){  
  if (function_exists('file_get_contents')) {  
    $result = @file_get_contents($url);  
  }  
  if ($result == '') {  
    $ch = curl_init();  
    $timeout = 30;  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    $result = curl_exec($ch);  
    curl_close($ch);  
  }  

  return $result;  
}
4
actors315

Problème avec file_get_contents pour les requêtes https sous Windows , décommentez les lignes suivantes du fichier php.ini:

extension=php_openssl.dll
extension_dir = "ext"
3
Sandra

J'utilise opsenSUSE Leap et j'ai eu le même problème - cela signifie qu'il n'y a pas de support pour OpenSSL. Voici comment je l'ai résolu:

  1. Ouvrez YaST.
  2. Allez à la gestion de logiciel.
  3. Dans la zone de recherche du volet de gauche, entrez 'php5-openssl' et appuyez sur la touche Retour.
  4. Cliquez sur la case à cocher à côté de 'php5-openssl' dans le volet de droite pour le sélectionner, puis cliquez sur 'Accepter' (pour ajouter le support OpenSSL).
  5. Redémarrez Apache: Sudo service Apache2 restart

Ça y est, vous avez terminé.

2
mtchuente

Après avoir fouillé toute la journée, j’ai trouvé la réponse grâce à ce guide: http://piwigo.org/forum/viewtopic.php?id=15727

Fondamentalement sous Eclipse -> Windows -> Préférences -> PHP Exécutables, il y a une section sur l'endroit où le .exe et le .ini sont référencés. Ceux par défaut se trouvaient dans le répertoire Eclipse lorsque vous avez installé la fonction de kit de développement logiciel (SDK) PHP à partir d’Eclipses Installez Nouveau logiciel dans le menu Aide.

Ainsi, au lieu de cela, j'ai ajouté un nouvel exécutable appelé PHP 5.3.5 (CGI) et référencé les fichiers cgi.exe et .ini du dossier php de xampp.

Merci webarto pour avoir donné de votre temps pour m'aider.

2
John M

Pour ceux qui utilisent Winginx (basé sur nginx au lieu d’Apache), je l’ai corrigé en 4 étapes:

  1. Dans le menu Outils, appuyez sur le Winginx PHP5 Config (peu importe le 5 dans le nom ...):

     Winginx PHP5 Config

  2. Sélectionnez la version PHP que vous voulez que le php.ini change:

     PHP version selection

  3. Sur l'onglet PHP Extensions _, sélectionnez l'extension php_openssl et cliquez sur le bouton Enregistrer:

     php_openssl selection

  4. redémarrez le service PHP approprié via la barre des tâches (Arrêter et Démarrer):

     Restart PHP service

1
CPHPython

Essaye ça:

function curl($url){
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $buffer = curl_exec($curl);
    curl_close($curl);
    return $buffer;
}

1
paprik

PHP7, dans le fichier php.ini, supprimez le ";" avant extension=openssl

1
Shusen Yi

J'ai aussi cette erreur. J'ai compris que ma version de PHP n'avait pas compilé OpenSL, donc ajouter simplement la directive d'extension à php.ini ne suffisait pas. Je ne sais pas comment vous devez résoudre ce problème dans votre cas particulier, mais pour moi, j'utilise macports, et la commande était simplement:

Sudo port install php5-openssl
1
mason

Si vous utilisez wamp server alors allez sur icon click on this  wamp server icon click on this

Ensuite, allez sur PHP puis cliquez sur PHP extension. Php_openssl doit être activé à partir de là et redémarrez wamp server  active php_openssl from here

0
ML680

Dans mon cas (PHP 7.3 sous Windows en mode FastCGI), il ne commentait pas extension=openssl. Non extension = php _ openssl , comme la plupart des gens postent ici.

(La même chose était posté ici , mais sans détails sur le système d'exploitation, ce qui peut constituer une différence clé ici.)

0
1234ru