|
|
|
|
|
今天,一臺(tái)測(cè)速VPS的PHP程序運(yùn)行出現(xiàn)了問(wèn)題,一直以來(lái)都運(yùn)行得好好的,怎么會(huì)突然運(yùn)行不了呢?首先我想到的是Web服務(wù)器IIS的問(wèn)題,于是重啟IIS,但是并不湊效;隨后重啟服務(wù)器,但是問(wèn)題依舊,這讓我一時(shí)不知道怎么處理為好。于是,開始分析起錯(cuò)誤日志起來(lái)。
報(bào)錯(cuò)提示:gethostbyname failed
其實(shí)PHP程序執(zhí)行并沒(méi)有問(wèn)題,說(shuō)明PHP環(huán)境是沒(méi)有被破壞的。出問(wèn)題的是某些程式(函數(shù))不能執(zhí)行,報(bào)錯(cuò)提示如下:
Warning: get_headers() [function.get-header]: php_network_getaddresses: gethostbyname failed. errno = 0
Warning: get_headers(http://m.baidu.com) [function.get-header]: failed to open stream: php_network_getaddresses: gethostbyname failed. errno = 0
Notice: Undifined offset:1
Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: gethostbyname failed. errno = 0
Warning: file_get_contents() [function.file-get-contents]: failed to open stream: php_network_getaddresses: gethostbyname failed. errno = 0
根據(jù)報(bào)錯(cuò)提示,PHP運(yùn)行出錯(cuò)的地方是get_headers()和file_get_contents(),而原因均為gethostbyname失敗。意思是獲取不了域名主機(jī),即是域名解析失敗了。
解決方法
域名解析失敗,問(wèn)題找到了,但是原因是什么,以及如何解決呢?
根據(jù)以往的經(jīng)驗(yàn),服務(wù)器不能解析域名,原因多是DNS的設(shè)置的問(wèn)題,于是就從DNS的設(shè)置做起。
服務(wù)器的DNS原先是一個(gè)當(dāng)?shù)芈?lián)通的DNS,我現(xiàn)在把服務(wù)器的DNS設(shè)為8.8.8.8這個(gè)公共DNS看看。
然后,在dos里ping一下域名,看到可以ping通了。
檢測(cè)網(wǎng)絡(luò)連通與否
再次訪問(wèn)PHP程序,終于沒(méi)問(wèn)題了!
總結(jié)
本次經(jīng)驗(yàn)是,當(dāng)在服務(wù)器訪問(wèn)不了外網(wǎng)網(wǎng)站時(shí),試試更改下服務(wù)器的DNS,DNS對(duì)網(wǎng)絡(luò)的連通性起到十分重要的作用。