Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> getaddrinfo failed
gatunio
post 6.07.2012, 09:09:07
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (0%)
-----


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:

Go to the top of the page
+Quote Post
redeemer
post 6.07.2012, 09:32:36
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


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...)


--------------------
Go to the top of the page
+Quote Post
franki01
post 9.07.2012, 00:33:36
Post #3





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował franki01 9.07.2012, 00:34:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 08:01