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

144

Le problème est dans la question. J'ai fait une enquête approfondie pour trouver des solutions à ce sujet et je sais qu'il y a des sujets à cela et 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 en cours d'exécution avec Apache, MySQL et FileZilla installés.

Sur XAMPP, j'ai fait ce qui suit (Apache était désactivé pendant ces changements): J'ai cliqué sur Admin dans le panneau de configuration XAMPP et je suis allé à https:// localhost/xampp/. De là, j'ai accepté les certificats de cette ligne sur la page d'accueil:

Pour la prise en charge d'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 on. Sous «Environnement Apache», se HTTPStrouve On. Sous 'Variables PHP, se _SERVER["HTTPS"]trouve On. Sous 'Phar', se OpenSSL supporttrouve disabled(install 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. Sous la production et les fichiers php.ini développement (mieux prévenir que guérir), j'ai allow_url_fopen=On, allow_url_include=Onet je l' ai enlevé le point - virgule, de sorte que extension=php_openssl.dlln'est plus commenté sur. J'ai même confirmé que le .dll se trouve dans le dossier ext du dossier PHP. Les deux libeay32.dll et ssleay32.dll se trouvent dans les dossiers PHP et Apache. Le dossier Apache ne contient ni fichiers de production ni de développement php.ini.

Je suis allé à http://www.slproweb.com/products/Win32OpenSSL.html et ai installé Win32 OpenSSL v1.0.0d pour une mesure sûre.

Maintenant, la ligne de code en question dans mon 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 j'interroge mais ils sont servis via 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 en tant que script PHP sur Eclipse, tout sort 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 ces modifications que j'ai apportées (après avoir démarré Apache), j'obtiens 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 :

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

Attention: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= ID d'API supprimé & cx = ID de recherche supprimé & q = The + Devil + est allé + bas + vers + Géorgie & alt = atom & num = 5) [function.file-get-contents]: impossible d'ouvrir le flux: aucun fichier ou répertoire de ce type dans C: \ xampp \ htdocs \ tutorial \ retrieve_website.php à la ligne 29

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

openssl: non wrapper http: oui wrapper https: pas de 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 oublié ou omis de faire? À ma connaissance, j'ai fait tout ce que j'ai recherché concernant HTTPS et OpenSSL

John M
la source

Réponses:

183

Je l' ai résolu dans XAMPP par décommentant ;extension=php_openssl.dllen /apache/bin/php.ini dépit phpinfo () me dire /php/php.iniétait le fichier ini chargé.

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

kjetilh
la source
1
Êtes-vous sûr que c'est /apache/bin/php.ini, je ne le trouve pas dans XAMPP Portable Light 1.8.1? Cependant php/php.iniexiste, mais activer ssl ici n'aide pas :(
vine'th
1
cette réponse créerait alors un autre problème car openssl est maintenant désactivé et jettera une erreur si j'obtiens_file_contents un lien sécurisé
thedjaney
5
Pour moi c'était xampp/php/php.ini:) merci, PS: N'OUBLIEZ PAS DE REDÉMARRER APACHE APRÈS SAUVEGARDER
LES
97

J'ai dû ajouter extension=php_openssl.dllà mon php.inifichier 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é Apache, tout fonctionnait bien.

Ezra
la source
2
J'ai dû ajouter la ligne, car elle n'était pas dans php.ini - mais j'ai fait l'affaire - merci!
Q Studio du
33

ajoutez simplement deux lignes dans votre fichier php.ini.

extension=php_openssl.dll
allow_url_include = On

ça marche pour moi.

Roopchand
la source
7
J'utilise wamp et vous devez éditer le php.ini dans le dossier apache plutôt que l'habituel dans le dossier PHP: O
Al_
Merci, c'est ça allow_url_include = Onqui a résolu le problème pour moi.
Kiee
N'activez pas allow_url_include - cela rend votre serveur vulnérable.
Pascal9x
18

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, 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;
}
Dejan Marjanović
la source
1
a exécuté cette fonction curl que vous m'avez donnée et remplacée $xmlresults = file_get_contents($urlquery);par $xmlresults = curl($urlquery);. PHP Script l'a très bien exécuté avec les mêmes résultats que file_get_contents (). L'exécuter en tant que page Web PHP via localhost / tutorial / retrieve_website.php et j'obtiens cette erreur:Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\tutorial\retrieve_website.php on line 14
John M
1
Le problème est probaby dans le support SSL, exécutez phpinfo () et vérifiez s'il y a les commandes / indicateurs suivants :, '--with-openssl=/usr' '--with-openssl-dir=/usr'fondamentalement, vous devez compiler Apache avec le support SSL, vous devez également activer cURL qui est deux fois plus rapide que FGC, et dispose de nombreuses options. Je ne sais pas comment faire cela sous Windows, désolé.
Dejan Marjanović
1
la seule chose proche de cela est la commande Configure en haut de phpinfo () et qui n'a rien contenant --with-openssl. il contient d'autres - avec des choses. petite mise à jour: sur localhost, état vérifié et il dit HTTPS (SSL) est activé.
John M
1
Si vous invoquez return curl_exec($curl);, cela n'empêcherait-il pas curl_close($curl);l'exécution de la ligne suivante?
Jason Plank
12

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

; extension = php_openssl.dll

à

extension = php_openssl.dll

Saran Pal
la source
6

Dans mon cas, le problème était dû au fait que WAMP utilisait un php.ini différent pour la CLI qu'Apache, donc vos paramètres définis via le menu WAMP ne s'appliquent pas à la CLI. Modifiez simplement le php.ini CLI et cela fonctionne.

dtbarne
la source
1
Wel comment avez-vous fait où puis-je trouver le php.ini CLI
botenvouwer
1
La mienne se trouve ici:C:\path\to\wamp\bin\php\php5.3.10\php.ini
dtbarne
2
merci pour votre réponse, je pensais là où plusieurs fichiers php.ini. Quand j'ai cherché, je n'en ai trouvé qu'un et j'ai décommenté:; extension = php_openssl.dll Mais j'utilise xammp, je l'ai confondu avec wamp. Maintenant ça marche, ouais!
botenvouwer
6

dans OpenSuse 12.1, la seule chose requise était:

zypper in php5-openssl
TheSatinKnight
la source
1
pouvez-vous expliquer s'il vous plaît ??
Jason W
1
Je veux dire, j'ai reçu le message d'erreur "Impossible de trouver le wrapper" https "- avez-vous oublié de l'activer lorsque vous avez configuré PHP?" et l'a résolu en entrant "zypper in php5-openssl" sur la ligne de commande. Cela a corrigé l'erreur.
TheSatinKnight
5

Pour moi, j'ai dû décommenter ces lignes dans php.ini:

extension=php_openssl.dll
extension_dir = "ext"

«ext» est applicable si php_openssl.dll se trouve dans le dossier «ext».

Remarque: j'ai dû 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 sur le dossier PHP

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

La source

zeta
la source
5

Sur MAC AMPPS, j'ai mis à jour le php-5.5.ini avec ce qui suit et maintenant cela fonctionne.

allow_url_include = On
extension=openssl.so
Elye
la source
5

Dans mon cas (PHP 7.3 sur Windows en mode FastCGI), il était sans commentaire extension=openssl. Pas extension = php_ openssl , comme la plupart des gens publient ici.

(La même chose a été publiée ici , mais sans détails sur le système d'exploitation, ce qui peut être une différence clé ici.)

1234ru
la source
4

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

Shusen Yi
la source
4

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

extension=php_openssl.dll
extension_dir = "ext"
Sandra
la source
4

Vous pouvez utiliser cette fonction à la place si curl est installé sur votre système:

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;  
}
acteurs315
la source
2

Après avoir fouiné 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 -> Exécutables PHP, il y a une section sur où le .exe et .ini sont référencés. Ceux par défaut se trouvaient dans le répertoire Eclipse lorsque vous installez la fonction SDK des outils de développement PHP à partir d'Eclipses Installer un nouveau logiciel dans le menu Aide.

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

Merci webarto de donner votre temps pour m'aider.

John M
la source
2

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. Accédez à la gestion des logiciels.
  3. Dans la zone de recherche sur le volet 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» (cela ajoute la prise en charge d'OpenSSL).
  5. Redémarrez Apache: sudo service apache2 restart

Voilà, vous avez terminé.

mtchuente
la source
1

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

sudo port install php5-openssl
le maçon
la source
1

Pour ceux qui utilisent Winginx (basé sur nginx au lieu de basé sur Apache), je l'ai corrigé avec ces 4 étapes:

  1. Dans le menu Outils, cliquez sur Winginx PHP5 Config (sans oublier les 5 dans le nom ...):

    Configuration de Winginx PHP5

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

    Sélection de la version PHP

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

    sélection php_openssl

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

    Redémarrez le service PHP

CPHPython
la source
1

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;
}

paprik
la source
2
En quoi est-ce différent de cette réponse qui est déjà sur cette question ?
HPierce
@HPierce il a 2 lignes qui causeront une erreur de syntaxe due à l' opérateur d'exponentiation au début et à la fin de ces lignes ... Marqué pour suppression.
CPHPython
@CPHPython Je pense qu'ils ont essayé d'utiliser le style gras dans un bloc de code
Nick
1
@CPHPython, vous pouvez utiliser du code en gras, mais vous devez utiliser une syntaxe différente ... Si vous faites un <code> <pre> code normal ... du code en gras avec des * </pre> </code> vous l'obtenez :-). Apparemment, je ne savais pas cela en 2016 ou j'aurais peut-être modifié ceci. Quoi qu'il en soit, je suis heureux de le voir supprimé.
HPierce
1
@Nick, vous pouvez coder en gras! Je ne pense pas que ce soit documenté nulle part. Je l'ai fait ici à titre d'exemple, mais je pense que cela sera toujours supprimé.
HPierce
0

Si vous utilisez le serveur wamp, allez sur l'icône, cliquez dessus icône du serveur wamp cliquez dessus

Ensuite, allez dans PHP puis cliquez sur l'extension PHP, il y aurait besoin de php_openssl pour activer à partir de là et redémarrer le serveur wamp active php_openssl à partir d'ici

ML680
la source
-1

Dans le simple_html_dom.php, changez la valeur de la $offsetvariable de -1à 0. cette erreur se produit généralement lorsque vous migrez vers PHP 7.

HtmlDomParser::file_get_htmlutilise un décalage par défaut de -1, la transmission 0devrait résoudre votre problème.

Cerveau d'or
la source