PHPエラー「php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution」の原因と解決方法
fsockopen関数で、
fsockopen(ドメイン名,80)
といったように、指定したドメインに(80番ポートで)接続しようとしたところ、以下のようなエラーメッセージが表示され、指定したドメインへの接続には失敗することがある。
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /home/neko/test.php on line 12
Warning: fsockopen() [function.fsockopen]: unable to connect to nobuneko.com:80 (Unknown error) in /home/neko/test.php on line 12
上記のPHPエラーには、「failure in name resolution」とある。
「failure in name resolution」とは、「名前解決に失敗」という意味だ。
これは、ドメインをIPアドレスに変換することに失敗していることを意味する。
従って、上記のようなPHPエラーが出た場合、PHPを動作させているマシン(Linux、Solaris、Windows等)に設定されているDNSサーバの指定が正しいかどうかを確認し、正しくない場合は、DNSの指定を正しくすることで問題が解決する。
もし、そのマシンのDNSサーバの指定を確認した結果、
- 何も設定していない
- 設定しているが、指定したDNSサーバのIPアドレスが間違っている
- 指定したDNSサーバのIPアドレスは正しいが、DNSサーバが故障している
といったことが判明した場合、そのマシンでは、ドメインをIPアドレスに変換できない、という問題が発生していることを認識しないといけない。
ドメインをIPアドレスに変換できない問題が発生しているマシンでは、インターネット接続によるドメインベースでのサイト閲覧にも失敗してしまうので、上記のようなPHPエラーが表示された場合は、
- PHPを動作させているマシンでのドメインベースでのサイト閲覧が成功するかどうか
- nslookupを実行して正引きに成功するかどうか
といったことを問題の切り分けとして確認してみると良いかと思う。