139 votes

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 sujet et je sais qu'il y a des sujets à ce sujet et je les ai suivis aussi, mais 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 fait tourner XAMPP avec Apache, MySQL et FileZilla.

Sur XAMMP, j'ai procédé comme suit (Apache était éteint pendant ces modifications) : J'ai cliqué sur Admin dans le panneau de configuration de XAMMP et je suis allé sur https:// localhost/xampp/. De là, j'ai accepté les certificats à partir 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 vérifié phpinfo(). Sous Environnement, SERVER["HTTPS"] est activé. Sous Environnement Apache, HTTPS est activé. Sous Variables PHP, _SERVER["HTTPS"] est activé. Sous Phar, le support OpenSSL est désactivé (installer ext/openssl). Je ne sais pas comment activer celui de Phar.

Maintenant, en ce qui concerne les fichiers eux-mêmes dans C:\xampp Je suis allé dans le dossier php. Dans les fichiers php.ini de production et de développement (mieux vaut prévenir que guérir), j'ai allow_url_fopen=On, allow_url_include=On, et j'ai supprimé le point-virgule pour que extension=php_openssl.dll ne soit plus commenté. J'ai même confirmé que le fichier .dll se trouve dans le dossier ext du dossier php. Les fichiers libeay32.dll et ssleay32.dll se trouvent tous deux dans les dossiers php et apache. Le dossier apache ne contient pas les fichiers php.ini de prod ou dev.

Je suis allé à http://www.slproweb.com/products/Win32OpenSSL.html et installé Win32 OpenSSL v1.0.0d par mesure de sécurité.

La ligne de code en question dans mon fichier retrieve_website.php serait la suivante :

$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 j'interroge, mais ils sont http et ils fonctionnent bien. J'ai également 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 comme un script PHP sur Eclipse, tout fonctionne parfaitement comme je le souhaite avec ces résultats :

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é toutes les modifications que j'ai apportées (après avoir démarré Apache), j'obtiens toujours les mêmes erreurs que la première fois lorsque j'exécute mon fichier php en tant que page Web PHP sur Eclipse et sur Firefox en tant que http:// localhost/tutorial/retrieve_website.php :

Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in C:\xampp\htdocs\tutorial\retrieve_website.php on line 29

Warning: file_get_contents(https:// www.googleapis.com/customsearch/v1?key=*removed API ID*&cx=*removed search ID*&q=The+Devil+went+down+to+Georgia&alt=atom&num=5) [function.file-get-contents]: failed to open stream: No such file or directory in C:\xampp\htdocs\tutorial\retrieve_website.php on line 29

Warning: DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in C:\xampp\htdocs\tutorial\retrieve_website.php on line 33
openssl: no http wrapper: yes https wrapper: no wrappers: array(10) { [0]=> string(3) "php" [1]=> string(4) "file" [2]=> string(4) "glob" [3]=> string(4) "data" [4]=> string(4) "http" [5]=> string(3) "ftp" [6]=> string(3) "zip" [7]=> string(13) "compress.zlib" [8]=> string(14) "compress.bzip2" [9]=> string(4) "phar" } 

Qu'est-ce que j'ai négligé ou omis de faire ? À ma connaissance, j'ai fait tout ce que j'ai recherché concernant https et openssl.

178voto

kjetilh Points 2979

Je l'ai résolu dans XAMPP en décommentant ;extension=php_openssl.dll en /apache/bin/php.ini malgré phpinfo() me dit /php/php.ini était le fichier ini chargé.

EDITAR: Je pense que la réponse d'Ezra est la meilleure solution : ajouter directement la ligne d'extension au fichier ini approprié.

97voto

Ezra Points 701

J'ai dû ajouter extension=php_openssl.dll à mon php.ini situé dans xammp/php/php.ini . Après l'avoir ajouté et avoir redémarré Apache, tout fonctionnait bien.

32voto

Roopchand Points 686

Il suffit d'ajouter deux lignes dans votre fichier php.ini.

extension=php_openssl.dll
allow_url_include = On

cela fonctionne pour moi.

18voto

webarto Points 11803

Votre Apache n'est probablement pas compilé avec le support SSL. Utilisez de toute façon cURL au lieu de file_get_contents. Essayez ce code, s'il échoue alors 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;
}

12voto

Saran Pal Points 81

J'ai activé l'extension openssl et cela fonctionne pour moi :)

;extension=php_openssl.dll

à

extension=php_openssl.dll

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X