fopen et hosts

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fopen et hosts

par Sékiltoyai » 15 juin 2007, 01:02

Au passage, installes la dernière version de php avant de poster un quelconque rapport de bug.

par Hubert Roksor » 14 juin 2007, 20:42

Tiens, je n'avais pas remarqué que ce sujet avait été mis à jour. Oops.
Sauf que dans ce cas ci, cela ne doit pas passer par le proxy, d'ailleurs je ne lui indique nulle part une éventuelle adresse de proxy. enfin je crois ...
Euh, vérifie ton php.ini. Fais un file_get_contents('http://www.adresseip.com']) et vois l'IP qui est affichée. Si tu n'utilises effectivement pas de proxy, essaie le code que j'ai proposé plus haut tout seul dans un script:
<?php
echo file_get_contents('http://127.0.0.1/phpinfo.php', false, stream_context_create(array( 
    'http'    =>    array( 
        'header'    =>    'Host: zla.example.com' 
    ) 
)));
?>
Et si ça ne marche toujours pas, regarde du côté de http://bugs.php.net/ parce que c'est certainement un bug.
Cela marche en appelant les sites par les adresses IP... :-/
Justement, dans mon exemple on n'utilise que l'adresse IP donc je ne comprends pas.

par molokoloco » 14 juin 2007, 18:46

oui... apparement depuis php5 les fonctions file, fileGetContent... ne marche plus bien sous windows...

=> php_network_getaddresses: getaddrinfo failed: Hôte inconnu.

Cela marche en appelant les sites par les adresses IP... :-/

par titerm » 07 juin 2007, 10:58

Ah, non, autant pour moi. Le serveur php n'a aucune connaissance du parametrage du proxy du navigateur.

coté php.ini, je pense que tu as déjà mis allow_url_fopen = On

J'ai moi meme un proxy, je viens de faire un test,


$f = fopen('http://www/test.log','r');
$d = fread($f,5000);
echo $d;
fclose($f);
mon apache est local, www est sur le loopback dans le host windows, pas de conf particulière, et ca lit bien le fichier

test.log est a la racine du vhost www.

par Le Zla » 07 juin 2007, 09:47

Ce site est deja dans l'exclusion proxy.

Je n'aurai pas cru que php se servait des parametres du navigateur.

par titerm » 07 juin 2007, 09:33

Si tu es derrière un proxy, dans ton navigateur tu as certainement configurer l'acces via proxy pour http.
sous firefox, outils/options/avancé/reseau/parametre,
sous ie outils/options/connexions/parmetre reseau local

Dans cette meme zone, tu as une liste d'exclusion (pas de proxy pour...), il faut mettre dedans non pas l'ip mais le hostname tel que que tu l'as définie dans ton fichier host. en l'occurence, zla.example.com dans ton cas.

Essai ca, si ca suffit pas, on creusera plus loins

par Le Zla » 07 juin 2007, 09:13

Sauf que dans ce cas ci, cela ne doit pas passer par le proxy, d'ailleurs je ne lui indique nulle part une éventuelle adresse de proxy. enfin je crois ...

par Hubert Roksor » 06 juin 2007, 18:36

je suis derrière un proxy.
Stoooooooooooop. Si tu es derrière un proxy c'est le proxy qui s'occupe de la traduction des noms d'hôtes à partir de l'en-tête "Host". Il te faut donc changer le fichier "hosts" du proxy pour pointer là où tu veux.

par Le Zla » 06 juin 2007, 16:43

Je reprends exactement le code que tu as posté.

Mais j'ai effectué davantage de tests, et si par exemple j'essaye de taper sur google, j'obtiens la même erreur.
Sauf que dans le cas de google c'est compréhensible puisque je suis derrière un proxy.

La machine zla.example.com elle est sur mon réseau interne.
Et par opposition j'arrive tout à fait a taper d'autres machines du réseau.

par Hubert Roksor » 06 juin 2007, 16:32

Le problème c'est que pour ce type d'usage, le message d'erreur que tu cites est impossible donc le problème doit venir d'ailleurs. Poste le bout de code en question pour voir ?

par Le Zla » 06 juin 2007, 16:06

Hum sauf que ca ne marche pas... Même erreur...
En tout cas c'est une piste.

par Le Zla » 06 juin 2007, 16:01

Super merci je tente ca !

par Hubert Roksor » 06 juin 2007, 15:59

A priori c'est une erreur de Windows car j'utilise un fichier "hosts" moi-même (sous Windows, et sous Linux) et je n'ai jamais eu de problème du genre (et j'utilise beaucoup de vhosts pour mes tests). L'IP utilisée par fopen() est bien celle du fichier "hosts".

À part ça, j'ai testé une solution utilisant les "stream wrappers" et finalement c'est beaucoup plus facile que ce que je pensais. On peut faire quelque chose comme
echo file_get_contents('http://127.0.0.1/phpinfo.php', false, stream_context_create(array(
	'http'	=>	array(
		'header'	=>	'Host: zla.example.com'
	)
)));
...ce qui équivaudrait à mettre

Code : Tout sélectionner

127.0.0.1 zla.example.com
...dans ton fichier "hosts". Clique sur les fonctions pour aller sur la page du manuel correspondante.

par Le Zla » 06 juin 2007, 15:50

en fait je suis sous windows et dans "system32/drivers/etc/hosts"
j'ai une entrée xxx.xxx.xxx.xxx zla.exemple.com

je tente de faire un fopen sur par exemple :
http://zla.exemple.com

et il me renvoie :

Code : Tout sélectionner

php_network_getaddresses: getaddrinfo failed: Hôte inconnu
ce qui me laisse à penser que le serveur (apache/php) ne trouve pas le serveur zla.exemple.com et que donc la résolution via le fichier Host ne se fait pas.

par Hubert Roksor » 06 juin 2007, 15:46

Je ne comprends pas. Tu possèdes une entrée dans ton fichier "hosts" (/etc/hosts ? c'est quoi ce fichier ?) pour le nom de domaine "zla.example.com" et tu veux ouvrir l'URL "http://zla.example.com" en utilisant une autre IP que celle de ton fichier "hosts" ? J'ai bien peur que cela soit impossible avec fopen(). Peut-être en cherchant chez curl_setopt(), sinon ta seule solution serait de faire ton propre agent HTTP, mais c'est pas top-top.