名前解決の一時的な失敗:ホスト名の検索の失敗


10

PHPで何ヶ月も問題なく動作しているスクリプトがあります。最近は機能しなくなりました。

このスクリプトはGmailに接続して、顧客にメールを送信します。

最近、スクリプトを実行するとこのエラーが発生し始めました。

The SMTP connection failed to start [tls://smtp.gmail.com:465]: 
fsockopen returned Error Number 0 and Error String 'php_network_getaddresses: 
getaddrinfo failed: Temporary failure in name resolution'

覚えておいてください、これはコード変更なしでした。

私は私のresolv.confを見ました、そしてそれは大丈夫であるように見えます:

nameserver 208.67.222.222

私はgmail.comにpingできます:

# ping smtp.gmail.com
PING gmail-smtp-msa.l.google.com (74.125.93.111) 56(84) bytes of data.
64 bytes from qw-in-f111.google.com (74.125.93.111): icmp_seq=1 ttl=247 time=26.7 ms  

lynxを介してGoogleや他のサイトに問題なく接続できます。

問題なくGmailアカウントにログインしました(キャプチャもありません)。

ようやく終わりました。誰かアイデアはありますか?

ジーマン


スクリプトは常に失敗ていますか?それともたまに?
MikeyB 2009年

毎回失敗します。
GeoffreyF67

定期的にTCP再接続を実行するCで書かれたデーモンでも同様の問題が発生しました。ある時点でgetaddrinfo()が突然エラーを返し始めました。サーバーを調べたところ、DNS要求は送信されておらず、必要なエントリを/ etc / hostsに追加しても役に立ちませんでした。確かに、再起動は役立ちますが、Xerxesが正しく述べたように、これは実際のソリューションではありません。最初はfreeaddrinfo()呼び出しがないために問題が発生したと思っていましたが、テストアプリケーションで再現できませんでした。とにかく、私はデーモンに適切なクリーンアップ呼び出しを追加し、それを注意深く監視します。
リヌリン2009

回答:


13

PHPは/ etc / hostsまたは/etc/resolv.confのいずれかにアクセスできません。この特定のエラーに関連するPHPには長い間問題があります。修正方法は、ApacheまたはPHPを呼び出しているものを再起動するか、または/ etc / hostsと/etc/resolv.confがPHPを呼び出しているものから読み取り可能であることを確認することです。


再起動はトリックをしました!
GeoffreyF67

4
はい、しかし次の再起動までにどれくらいの時間がかかりますか?さらに調べて、問題の根本的な原因を見つけます。
Xerxes、

うわー、同じ問題が発生していましたが、どうやらサービスhttpd再起動が解決策です...しかし、これの原因はまだわかりません...
J_Wesker

6

同じエラーが発生しました

service httpd restart

トリックをした...


2
% dig @208.67.222.222 smtp.gmail.com +short
gmail-smtp-msa.l.google.com.
209.85.201.109
209.85.201.111
%

次に、Xdebugを使用して、問題が正確にどこにあるかを確認します。

<?php
xdebug_start_trace('/tmp/lookup-trace.log');
$ip = gethostbyname('smtp.gmail.com');
xdebug_stop_trace();
die($IP);
?>

ログに良いものはありますか?


1

その行の前にデバッグコードを追加して、スクリプトがコードを正しく解決できることを確認します。


0

今日私はこの欠陥を抱えていましたが、特定のイベントの後に発生し、原因を見つけたのではないかと思います。

いくつかのネットワーク機器の問題が原因で、サーバーで実際に再起動し、サーバーが再起動したときに、ケーブル接続に誤ったネットワーク接続がありました。これは事実上、DNSサーバーが利用できなかったことを意味します。

その間、このphp関数が呼び出され、この後は、httpdを再起動するまで二度と機能しませんでした。

バグはネットワーク障害(DNSが利用できないだけでなく到達不能、つまり間違ったサブネット)に関連している可能性があり、ネットワークがその後回復してもこの機能はDNSを再度検索しません。

これは数年前のことですが、おそらくこのバグはPHPで修正されていますか?


0

magento 2を最新バージョンにアップグレードしているときに次の問題が発生したので、phpの設定に問題があると思われます。

The "https://repo.magento.com/packages.json" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 
failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

xampp throughコマンドを再起動することで解決しました。

sudo /opt/lampp/lampp/stop
sudo /opt/lampp/lampp/start

その後、composer updateコマンドを再試行すると、それは魅力のように機能しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.