web-dev-qa-db-ja.com

file_get_contents():php_network_getaddresses:getaddrinfo failed

Cronジョブを使用して、あるサーバーから別のサーバーにいくつかの値を更新しようとしています。私はfile_get_contents()を使用しています。

奇妙なことに、これは時々失敗します。 1分間機能し、もう1分間機能しません。次の2つのエラーが表示されます。

PHP警告:file_get_contents():php_network_getaddresses:getaddrinfo failed:名前またはサービスが不明

PHP警告:file_get_contents():ストリームを開けませんでした:php_network_getaddresses:getaddrinfoが失敗しました:名前またはサービスが不明です

そして:

PHP警告:file_get_contents():php_network_getaddresses:getaddrinfo failed:アドレスがホスト名に関連付けられていません

PHP警告:file_get_contents():ストリームを開けませんでした:php_network_getaddresses:getaddrinfoが失敗しました:ホスト名に関連付けられたアドレスがありません

この問題が発生するサーバーにログインしました。 pingまたはtracerouteの使用は問題なく機能するため、DNSの問題は除外しました。念のため、Google DNSネームサーバーも追加しました。まったく同じコードを使用する3番目のサーバーにはこの問題がないため、「応答」側ではなく、「呼び出し側」に問題があるように見えます。この場合、ホスト名をIPに置き換えることはできません。

誰かがこれを解決する方法を知っていますか?

12
Anorionil

私の場合、問題は、Apacheの起動時に/etc/resolv.confからDNSエントリを取得することでした。 Apacheを起動したときには、まだネットワークが設定されていませんでした。 (ネットワークの構成後に)Apacheを再起動すると、問題が解決しました。

私は私のブログ投稿でケースをより詳細に説明しました http://diogomelo.net/blog/16/Warning-file_get_contents-php_network_getaddresses-getaddrinfo-failed-No-address-associated-with-hostname

12
Diogo Melo

Cronジョブ内で実行していると、名前の検索が失敗することがあります。/etc/hostsにある名前でしか見たことがありませんが、DNS名をテストしていません。

電子メールの送信とSMTP接続のタイムアウトで表示されていました。

正確な原因はわかりませんが、私の場合、SMTPコードで127.0.0.1の代わりにlocalhostを使用すると、問題は解消しました。

1
TheJosh

これは、2番目のサーバーの接続制限が原因であり、cronジョブに短い時間間隔を設定したと思います。ご存知のように、サーバーは各IPからの連続接続を制御します。この問題を解決するには、より長い時間間隔を選択できます。

0
Pmpr