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.
Je l'ai résolu dans XAMPP en décommentant ;extension=php_openssl.dll
dans /Apache/bin/php.ini
malgré 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é.
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.
ajoutez simplement deux lignes dans votre fichier php.ini.
extension=php_openssl.dll
allow_url_include = On
ça marche pour moi.
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;
}
J'ai activé l'extension openssl et ça marche pour moi :)
; extension = php_openssl.dll
à
extension = php_openssl.dll
dans OpenSuse 12.1, la seule chose requise était:
zypper in php5-openssl
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.
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
Sur MAC AMPPS, j’ai mis à jour le fichier php-5.5.ini avec ce qui suit.
allow_url_include = On
extension=openssl.so
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;
}
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"
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:
Sudo service Apache2 restart
Ça y est, vous avez terminé.
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.
Pour ceux qui utilisent Winginx (basé sur nginx au lieu d’Apache), je l’ai corrigé en 4 étapes:
Dans le menu Outils, appuyez sur le Winginx PHP5 Config (peu importe le 5 dans le nom ...):
Sélectionnez la version PHP que vous voulez que le php.ini change:
Sur l'onglet PHP Extensions _, sélectionnez l'extension php_openssl et cliquez sur le bouton Enregistrer:
redémarrez le service PHP approprié via la barre des tâches (Arrêter et Démarrer):
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;
}
PHP7, dans le fichier php.ini, supprimez le ";" avant extension=openssl
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
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.)