2011-06-08 6 views
16

Starając się uzyskać informacje z zewnętrznego źródła, Otrzymuję następujący błąd:PHP błędach: php_network_getaddresses: getaddrinfo failed: (podczas pobierania informacji z drugiej strony).

Warning: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in line #...

Wczoraj wszystko było w porządku, więc co się stało z tym skryptem, który nie działa i daje mi powyższy błąd? Jakieś rozwiązanie lub wskazówka, aby rozwiązać ten problem?

$uri = "http://api.hostip.info/?ip=$ip&position=true"; 

$dom->load($uri); 

Próbowałem też poprzez konwersję DNS IP ale wtedy pojawia się ostrzeżenie: failed to open

$uri = "174.129.200.54/?ip=$ip&position=true"; 

próbowałem usunąć http ale wciąż otrzymuję powyższy błąd.

+0

@Cold hawajski: Ok, jestem aktualizowania moje pytanie. –

+0

Czy możesz otworzyć link bezpośrednio w przeglądarce? Jeśli nie, to nie jest problem PHP. Hostip.info mógł zablokować ci dostęp do swojej witryny za niewłaściwe użycie lub cokolwiek innego. – sanmai

+0

Na moim komputerze to polecenie działa poprawnie: 'curl" http://api.hostip.info/?ip=\'curl whatismyip.org \ '& position = true" ' – sanmai

Odpowiedz

19

To dlatego, że nie można rozpoznać nazwy hosta DNS Może problemy, host jest nieosiągalny ...

spróbuj użyć adresu IP zamiast nazwy hosta ... ten ping nazwa hosta ... nslookup it ...

+0

Przekonwertowałem "api.hostip.info" na "174.129.200.54" ale nadal nie działa i komunikat ostrzegawczy => nie załadował się. –

+1

To prawda, ponieważ api.hostip.info nie jest domyślne dla 174.129.200.54 –

+0

spróbuj wget http : //api.hostip.info/? ip = $ ip & position = true, jeśli zwraca poprawny xml, problem nie występuje w połączeniu ... –

3

Wyobrażam sobie, że buforujące serwery DNS, których używasz, nie działają poprawnie (lub serwer DNS dla domeny, którą rozwiązujesz, nie działa poprawnie). Możesz spróbować naprawić pierwszą możliwość.

Czy masz co najmniej 2 serwery nazw zarejestrowane w twojej karcie sieciowej? Zawsze możesz zamienić swój komputer na inny buforujący serwer DNS, aby temu zaradzić. Wypróbuj Google:

8.8.8.8 
8.8.4.4 
+0

Próbuję wiele metod, ale niestety nie ma sukcesu, a także nie ma jednej prostej metody dla tego ... utknąłem teraz .. co robić .. –

+0

To nie jest konieczne metoda - to jest buforowanie DNS twojego serwera konfiguracja (jeśli masz dostęp). –

+0

Ale już teraz wykonuję ten kod i daję wynik, ale teraz nie działa. –

1

Jeśli możesz zdyskontować przejściowe przerwy w działaniu na serwerze zdalnym, z którym próbujesz się połączyć, to po prostu pozostawia problem z konfiguracją sieci lokalnej.

Użycie adresu IP zamiast nazwy hosta będzie działać tylko dla domeny domyślnej na zdalnym hoście.

Co stanie się, gdy spróbujesz użyć www.google.com (lub jego adresu IP)? Jeśli nie możesz się połączyć, to ma to coś wspólnego z siecią między twoim serwerem a światem zewnętrznym.

+0

może być problem z konfiguracją serwera wewnętrznego. –

7

W następującym pliku httpd.conf skonfiguruj prawidłowo ServerName.

/etc/httpd/conf/httpd.conf

jak poniżej:

ServerName 127.0.0.1:80 

lub

ServerName sitename 

to rozwiązane Podobny problem miałem zachodu.

+0

Nie mam POMYSŁU, dlaczego to robi różnicę, ale rozwiązał również mój problem. Okresowo uzyskiwałam awarie DNS i ustawienie ServerName rozwiązało problem. – David

3

W moim przypadku (moja maszyna to ubuntu 16), dołączam plik /etc/resolvconf/resolv.conf.d/base, dodając poniższe ns linie.

nameserver 8.8.8.8 
nameserver 4.2.2.1 
nameserver 2001:4860:4860::8844 
nameserver 2001:4860:4860::8888 

następnie uruchomić skrypt aktualizacji,

resolvconf -u 
+0

dlaczego to jest praca? Muszę to wiedzieć .. –

+1

@AbdulAzizAlBasyir Z powodu rozdzielczości dns, skrypt próbuje rozpoznać adres. Więcej informacji można znaleźć w [tutaj.] (Http://manpages.ubuntu.com/manpages/zesty/man5/resolv.conf.5.html). –