[RESOLU] file_get_contents avec https

Petit nouveau ! | 4 Messages

29 déc. 2015, 11:35

Bonjour à tous,

Je n'arrive pas à obtenir une page d'un serveur distant via file_get_contents("https://www.google.com/").
SVP ne me parler pas de curl.

Pour les certificats, j'ai pris ceux du navigateur, je ne suis pas sûr que cela soit correcte, mais de toute façon j'ai également essayé avec des certificats valides via d'autres site

Je précise
- je suis PHP Version 5.6.14 sous Debian jessie
- sur le même serveur la fonction fonctionne bien (allow_url_fopen est à on)
- j'ai essayé beaucoup de chose mais rien à faire exemple ci-dessous

Code : Tout sélectionner

<?php $uri = 'https://www.toto.com/index.php'; $cafile = '/etc/ssl/certs/toto.crt'; $ctx = stream_context_create(['ssl' => [ 'cafile' => $cafile, 'verify_peer' => true, 'ciphers' => 'HIGH:!SSLv2:!SSLv3', 'disable_compression' => true, 'CN_match' => 'toto.com' ]]); $section = file_get_contents($uri, FALSE, $ctx); var_dump($section); ?>
Pourriez-vous me dire ce qui ne vas pas ?
pour essai j'essaie de obtenir https://www.google.com/ ou https://www.example.com/

D'avance merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 déc. 2015, 12:08

Bonjour,

Si tu as bien openssl activé avec PHP (cf phpinfo() ), moi j'arrive à y accéder sans déclarer de contexte :
<?php
echo file_get_contents('https://www.google.com/');
Sinon, regarde dans les logs pour connaitre le message d'erreur car sans c'est difficile de trouver le soucis.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

29 déc. 2015, 12:20

Merci pour la réponse

pour les log désolé j'avais oublié de les indiqués "fail to open stream"
php info
openssl
OpenSSL support enabled
OpenSSL Library Version OpenSSL 1.0.1k 8 Jan 2015
OpenSSL Header Version OpenSSL 1.0.1k 8 Jan 2015
Openssl default config /usr/lib/ssl/openssl.cnf

Et avec ou sans déclaration de contexte.

Merci pour ton aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 déc. 2015, 12:44

Si tu testes mon code, quel est le message d'erreur exact ?

Si le pb ne se fait que sur l'url que tu cherches à avoir, peut être que le serveur distant bloque les requêtes directes et attend un user-agent valide par exemple, dans ce cas tu serais obliger d'utiliser Curl.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

29 déc. 2015, 13:03

en réponse à echo file_get_contents('https://www.google.com/');

voilà ce que j'obtiens dans le log
[Tue Dec 29 11:56:15.540643 2015] [:error] [pid 29717] [client xx.xx.xx.x:1910] PHP Warning: file_get_contents(https://www.google.com/): failed to open stream: Connection timed out in

Et cela quelque soit le site demandé google, example ou autre

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 déc. 2015, 15:02

Tu as peut être un firewall en amont de ton serveur qui bloque les connexions SSL (port 443), contacte ton hébergeur.
As-tu essayé un wget en ligne de commande, si tu as un accès SSH sur ton serveur pour voir si il passe ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

29 déc. 2015, 18:41

@rthur ne dit on pas le roi Arthur !!!
bougre de crétin que je suis cela faisait deux jours que j'essayais, pensant qu'il s'agissait d'erreur php, certificat ou dans le php.ini.

Mais non bien plus simple, juste mon firewall trop restrictif.

Un grand merci pour le coup de main, même si cela était si simple je crois que j'y serais encore à la Saint Glinglin.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 déc. 2015, 20:40

;)
Quand tout le reste a échoué, lisez le mode d'emploi...