web-dev-qa-db-fra.com

php_network_getaddresses: getaddrinfo a échoué: nom ou service inconnu

Voici un extrait de mon code

$fp = fsockopen($s['url'], 80, $errno, $errstr, 5);
if($fp){
        fwrite($fp, $out);
        fclose($fp);

Quand je le lance, il génère:

impossible de se connecter à www.mondomaine.net/1/file.php:80 (php_network_getaddresses: getaddrinfo a échoué: nom ou service inconnu

J'utilise ceci pour soumettre des données GET au $s['url']

Je ne peux pas comprendre pourquoi. Toute aide serait grandement appréciée.

57
Rob

Si vous souhaitez uniquement envoyer des données GET à l'URL, vous devez utiliser quelque chose de simple, tel que file_get_contents ();

$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);
21
elias

Vous ne pouvez pas ouvrir une connexion directement à un chemin sur un hôte distant à l'aide de fsockopen. L'URL www.mydomain.net/1/file.php contient un chemin lorsque la seule valeur valide pour ce premier paramètre est l'hôte, www.mydomain.net.

Si vous essayez d'accéder à une URL distante, alors file_get_contents () est votre meilleur choix. Vous pouvez fournir une URL complète à cette fonction, qui récupérera le contenu à cet emplacement à l'aide d'une requête HTTP normale.

Si vous souhaitez uniquement envoyer une requête HTTP et ignorer la réponse, vous pouvez utilisez fsockopen() et envoyez manuellement les en-têtes de requête HTTP, en ignorant les réponses. Cela pourrait être plus facile avec cURL cependant, ou tout simplement vieux fopen () , qui ouvrira la connexion mais ne lira pas nécessairement une réponse. Si vous voulez le faire avec fsockopen(), cela pourrait ressembler à ceci:

$fp = fsockopen("www.mydomain.net", 80, $errno, $errstr, 30);
fputs($fp, "GET /1/file.php HTTP/1.1\n");
fputs($fp, "Host: www.mydomain.net\n");
fputs($fp, "Connection: close\n\n"); 

Cela vous laissera bien sûr toute gestion d'erreur, mais cela signifierait que vous ne perdriez pas de temps à lire la réponse.

36
zombat

J'ai eu un problème similaire sur mon serveur de tests local et domaines de tests locaux, par exemple: www.testdomain.loc avec la fonction GetImageSize();

Résolu en ajoutant le nom d'hôte dans le fichier hosts sur le serveur local:

Dans le fichier/etc/hosts j'ai ajouté: 

192.168.1.1 www.testdomain.loc

J'espère que cela aide quelqu'un

21
Johan
$url = "http:user:pass@//www.example.com/abc.php?var1=def";
$url = urlencode($url);
$contents = file_get_contents(urldecode($url));
echo $contents;
3
Ap.Muthu

vous essayez d'ouvrir un socket sur un fichier de l'hôte distant qui n'est pas correct. vous pouvez établir une connexion de socket (TCP/UDP) vers un numéro de port sur un hôte distant. donc votre code devrait être comme ça:

fsockopen('www.mysite.com', 80);

si vous essayez de créer une ressource de pointeur de fichier dans un fichier distant, vous pouvez utiliser la fonction fopen (). mais pour ce faire, vous devez également spécifier le protocole d'application.

PHP fournit des wrappers de flux par défaut pour les fichiers URL ouverts. En fonction du schéma de l'URL, le wrapper de flux approprié sera appelé en interne. l'URL que vous essayez d'ouvrir n'a pas de schéma valide pour cette solution. assurez-vous qu'il y a un schéma du type "http: //" ou "ftp: //".

donc le code serait comme ça:

$fp = fopen('http://www.mysite.com/path/file.txt');

En outre, je ne pense pas que l'encapsuleur de flux HTTP (qui gère les actions sur les ressources de fichier sur les URL avec un schéma http) prenne en charge l'écriture de données. vous pouvez utiliser fread () pour lire le contenu de l'URL via HTTP, mais je ne suis pas sûr de pouvoir écrire.

EDIT: À partir de commentaires et d’autres réponses J'ai pensé que vous souhaitiez envoyer une requête HTTP à l’URL spécifiée . Les méthodes décrites dans cette réponse concernent les cas où vous souhaitez recevoir des données de l’URL distante. si vous voulez envoyer des données, vous pouvez utiliser http_request () pour le faire.

2
farzad

Avait un tel problème (avec https://github.com/PHPMailer/PHPMailer ), rechargez simplement PHP et tout a commencé à fonctionner

pour Centos 6 et 7:

service php-fpm restart 
1
Sanya Snex

Je recevais la même erreur de fsocket () et je viens de mettre à jour mes fichiers hôtes

  1. Je me suis connecté via SSH sur le serveur CentOS. USERNAME et PASSWORD Type
  2. cd/etc /
  3. ls // "juste pour regarder la liste" 
  4. vi hôtes // "éditer le fichier hôte"
  5. i // "pour mettre le fichier en mode insertion"
  6. 95.183.24.10 [nom_serveur_mail] dans mon cas ("mail.kingologic.com")
  7. Appuyez sur la touche ESC
  8. appuyez sur ZZ

espérons que cela résoudra votre problème 

pour toute autre requête, merci de me contacter à http://kingologic.com

1
Ali Khurram

Dans mon cas, cette erreur est due à une mauvaise configuration de /etc/nsswitch.conf sur Debian.

J'ai été remplacé

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

avec

hosts:          files dns

et tout fonctionne en ce moment.

Essayez de définir ENV PATH. Ajoutez le chemin PHP dans ENV PATH.

Pour que cette extension fonctionne, il existe des fichiers DLL qui doivent être disponibles pour le système PATH du système Windows. Pour plus d'informations sur cette procédure, reportez-vous à la FAQ intitulée "Comment ajouter mon répertoire PHP au chemin PATH sous Windows". Bien que copier des fichiers DLL du dossier PHP dans le répertoire système Windows fonctionne également (car le répertoire système se trouve par défaut dans le chemin PATH du système), cela n'est pas recommandé. Cette extension nécessite que les fichiers suivants soient dans le PATH: libeay32.dll 

http://php.net/manual/en/openssl.installation.php

0
DucTM

dans Word simple votre site a été bloqué pour accéder au réseau. Peut-être avez-vous automatisé un script et cela a bloqué tout votre site Web. La meilleure façon de résoudre ce problème est de contacter ce site et de signaler votre problème. si le problème est authentique, ils peuvent envisager le déblocage

0
Steeve