Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: getaddrinfo failed
Forum PHP.pl > Forum > PHP
gatunio
Wyświetla mi się powyższy błąd

php_network_getaddresses: getaddrinfo failed: Ta nazwa lub usługa jest nieznana

Pytanie to zadaje osobom doświadczonym, wiec nie odpowiadajcie jeśli tylko liznęliście php itd.

Sprawa wygląda że nie jest to wina złego adresu - tylko np chwilowego braku połączenia itd, Teraz chodzi głównie o to że nie jestem w stanie w żaden sposób złapać tego ostrzeżenia. tzn nie działa
ani @ ani try-catch. Po prostu Dupa.
Błąd pojawia się przy wszystkich funkcjach łączących to jest np fsockopen.

W profesjonalnej aplikacji nie ma miejsca na jakiekolwiek błędy prawda ?
Skoro komunikat pojawia się tylko w chwili kiedy nie ma połączenia, to teoretycznie, ostrzeżenie się nigdy nie wyświetli w warunkach produkcyjnych bo przy braku połączenia powinien wyskoczyć 404.

Ale Ale - Jeśli akurat ktoś ma aplikacje na localhoście - tzn na serwerze dostępnym bezpośrednio - to wtedy takie coś wyskoczy.

I czy ktokolwiek z was wie jak to ostrzeżenie złapać, tzn poza globalnym wyłączeniem ostrzeżeń biggrin.gif
czy np jest w php.ini jakieś ustawienie, które tego dotyczy - cokolwiek.
Byłbym wdzięczny - normalnie nie pytam, ale nie widzę nigdzie sposobu rozwiązania poza globalnym wyłączeniem ostrzeżeń oczywiście,


Przykład

try {

@$fsock = fsockopen('www.google.pl', 80, $errno, $errstr);

if (!$fsock) {
$er = "$errstr ($errno)<br />\n";
echo $er;
}
else{
//do dzieła
}

}
catch (Exception $e){
echo $e;
}

I tak wyskoczy
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed:

redeemer
Po pierwsze w środowisku produkcyjnym powinieneś zawsze wyłączyć wyświetlanie błędów (i nieważne czy strona stoi na localhost czy gdziekolwiek indziej).

Po drugie u mnie
  1. try {
  2.  
  3. @$fsock = fsockopen('www.tutajdomenaktorejniema.pl', 80, $errno, $errstr);
  4.  
  5. if (!$fsock) {
  6. die("BŁĄD");
  7. }
  8. else{
  9. die("OK");
  10. }
  11.  
  12. }
  13. catch (Exception $e){
  14. die("EXCEPTION");
  15. }
Nie zwraca żadnego warningu, tylko tekst "BŁĄD". Po usunięciu małpki otrzymuje dwa warningi: fsockopen(): php_network_getaddresses: getaddrinfo failed... i drugi: Warning: fsockopen(): unable to connect to www.tutajdomenaktorejniema.pl (php_network_getaddresses: getaddrinfo failed...)
franki01
W końcu jakiś ciekawy temat.

Jeżeli try catch i @ nie działa, funkcja musi zwyczajnie drukować ten tekst. Pozostaje inicjowanie zapisu do bufora przed wywołaniem funkcji, potem zczytujesz bufor i sprawdzasz czy coś w nim jest.

Co do samego błędu, jest on generowany nie tyle przez php o ile przez system operacyjny. Stąd właśnie php nie jest w stanie wychwycić, czy jest zwrócony błąd czy coś innego i zwraca to jako zwykłe echo. Sprawdź, czy serwery DNS wpisane na serwerze masz z jakiegoś dobrego źródła, czy masz aktualne software. Jeżeli masz dostęp do powłoki shell, nie powinieneś mieć problemów z aktualizacją pakietów. Jeżeli trzymasz to na hostingu, problem jest jeszcze mniejszy, bo załatwić to powinna obsługa techniczna. W każdym razie błąd leży na 100% w systemie operacyjnym, a nie w skrypcie.

Na forum php znalazłem taki post (źródło: https://bugs.php.net/bug.php?id=11058):
Cytat
Okay. I identified the problem.
When apache starts, php or apache gets dns servers entry
from /etc/resolv.conf
You're using a dialup connection and when logging in, your dns servers have been added at this later moment.
So there's a problem with apache or php to get informed that the content of resolv.conf has been updated.
Confirmed for PHP 4.3.1/apache_1.3.27 so.
Temporary solution is just to reload apache doing a apachectl stop/start


Problem występuje od 2004 do 2010 roku. Może po aktualizacji php będzie dobrze? Pozostaje sposób z ob_flush() i sprawdzaniem bufora. Jeżeli Twój skrypt uruchamiany jest przez crontaba, możesz, w momencie błędu, kazać mu poczekać kilka sekund (sleep()), aż resolv.conf zostanie wczytany (wynika z powyższego postu), a następnie znów uruchomić fsockopen.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.