Lỗi tạm thời trong phân giải tên: Lỗi tra cứu tên máy chủ


10

Tôi đã có một đoạn script trong PHP đã chạy tốt trong nhiều tháng. Nó gần đây đã ngừng hoạt động.

Kịch bản này kết nối với gmail để gửi email cho khách hàng của tôi.

Gần đây, tôi bắt đầu gặp lỗi này khi chạy tập lệnh:

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'

Hãy ghi nhớ, điều này là với thay đổi mã bằng không.

Tôi đã xem độ phân giải của tôi và nó có vẻ ổn:

nameserver 208.67.222.222

Tôi có thể ping gmail:

# 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  

Tôi có thể kết nối qua lynx với google và các trang web khác mà không gặp vấn đề gì.

Tôi đã đăng nhập vào tài khoản gmail của mình mà không gặp vấn đề gì (cũng không có hình ảnh xác thực nào).

Tôi đang ở cuối wits. Còn ai có ý tưởng nào không?

G-Man


Là kịch bản thất bại tất cả các thời gian? Hay chỉ thỉnh thoảng?
MikeyB

Thất bại mọi lúc.
GeoffreyF67

Tôi đã gặp vấn đề tương tự với trình nền của tôi được viết bằng C, thực hiện kết nối lại TCP định kỳ. Tại một số điểm getaddrinfo () đột nhiên bắt đầu trả lại lỗi. Khi tôi nhìn vào máy chủ, không có yêu cầu DNS nào được gửi và việc thêm mục nhập bắt buộc vào / etc / hosts không giúp ích được gì. Chắc chắn, khởi động lại giúp nhưng như Xerxes lưu ý đúng, đây không phải là giải pháp thực sự. Ban đầu tôi nghĩ rằng vấn đề là do cuộc gọi freeaddrinfo () bị thiếu nhưng tôi đã thất bại trong việc tái tạo nó bằng một ứng dụng thử nghiệm. Dù sao, tôi đã thêm các cuộc gọi dọn dẹp thích hợp vào daemon và sẽ giám sát chặt chẽ.
Linulin

Câu trả lời:


13

PHP đang gặp sự cố khi truy cập / etc / hosts hoặc /etc/resolv.conf: có một vấn đề tồn tại lâu dài trong PHP liên quan đến lỗi cụ thể này. Cách khắc phục là thử khởi động lại Apache hoặc bất cứ điều gì đang gọi PHP hoặc để đảm bảo / etc / hosts và /etc/resolv.conf có thể đọc được bằng cách gọi PHP.


Khởi động lại đã lừa!
GeoffreyF67

4
Có, nhưng bao lâu trước khi khởi động lại tiếp theo là do? Tôi sẽ nhìn xa hơn và tìm ra nguyên nhân gốc rễ của vấn đề.
Xerxes

Ồ, tôi cũng gặp vấn đề tương tự, nhưng rõ ràng khởi động lại dịch vụ httpd là giải pháp ... nhưng tôi vẫn không hiểu nguyên nhân gây ra điều này ...
J_Wesker

6

Tôi vừa trải qua lỗi tương tự và

service httpd restart

đã lừa


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

Bây giờ, hãy thử sử dụng Xdebug để xem vấn đề chính xác ở đâu ....

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

Bất cứ điều gì tốt trong các bản ghi?


1

Thêm mã gỡ lỗi trước dòng đó để đảm bảo rằng tập lệnh có thể giải quyết chính xác.


0

Tôi đã có lỗi này ngày hôm nay, tuy nhiên nó đã xảy ra sau một sự kiện cụ thể khiến tôi nghĩ rằng tôi có thể đã tìm ra nguyên nhân.

Do một số sự cố về thiết bị mạng, tôi thực sự đã khởi động lại máy chủ và khi nó hoạt động trở lại, có một kết nối mạng không chính xác trong hệ thống cáp, có nghĩa là không có máy chủ DNS nào khả dụng.

trong khi đó, hàm php này được gọi và sau đó nó không bao giờ hoạt động nữa cho đến khi tôi khởi động lại httpd.

Tôi nghĩ rằng lỗi có thể liên quan đến lỗi mạng (trong đó DNS không chỉ không khả dụng mà còn không thể truy cập được, tức là mạng con sai) và khi mạng phục hồi sau đó, chức năng này không tìm lại DNS.

Cái này đã được vài năm trước, có lẽ lỗi này đã được sửa trong PHP?


0

Tôi đã gặp vấn đề sau khi nâng cấp magento 2 lên phiên bản mới nhất, vì vậy tôi nghi ngờ đây là vấn đề với cấu hình 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

Đã giải quyết nó bằng cách khởi động lại xampp thông qua lệnh.

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

Sau đó thử lại composer updatelệnh và nó hoạt động như một lá bùa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.