oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

PHPの名前解決の挙動がコマンド実行時とブラウザからのアクセス時で異なる件について

メモです。

結論を簡単に言うと「名前解決に失敗したから」。ログのまんまですね。
ただ、名前解決に失敗した理由はおそらくDNSサーバかhostsファイルで
しかも複数ある内の一つでも問題が起こるとなる可能性がある??

以下、PHP 5.2.9+RHEL4.5系での動作について備忘録
1 /etc/resolv.confに複数DNSサーバを設定

2 仮にA、BのDNSサーバが居たとして
test.example.comの正引きをした場合
A→正引き可能
B→exapmle.comのドメインは定義しているが、test.example.comは未定義
という状況

3 以下のファイルを作成する。仮にtest.php

<?php
  $text = file_get_contents('http://test.example.com');
  print_r($text);
  exit();
?>

4 php test.phpでコマンドから実行した場合→正常に結果を取得、表示する

5 ブラウザからこのファイルにアクセスして実行→失敗し結果を表示出来ない場合がある。
PHPのエラーログには
php_network_getaddresses: getaddrinfo failed: Name or service not known in」
が出力される。

以上の結果から、何故かブラウザからのアクセスにより実行されるとDNSの名前解決は
複数設定されていてもある基準によって一つだけ選択され、おまけに1回問い合わせたら
リトライ等の動作はしない様子。なんでなんだろう?
何か設定があるのかな?