php執行curl錯誤:Could not resolve host: www.baidu.com; Name or service not known解決辦法
在獲取遠程數據的時候,碰到一個很頭疼的事情:
$url = 'https://www.baidu.com';
$curl = curl_init($url);
//設置選項
curl_setopt_array($curl, array(
CURLOPT_TIMEOUT => 30, //超時時間
CURLOPT_CUSTOMREQUEST => $method,// 請求方法
CURLOPT_RETURNTRANSFER => true,// 返回內容
CURLOPT_HEADER => false,// 返回header
CURLOPT_FOLLOWLOCATION => true,// 自動重定向
CURLOPT_SSL_VERIFYPEER => false,// 不校驗證書
));
//執行請求
$output = curl_exec($curl);
$info = curl_getinfo($curl);
$error = curl_error($curl);
curl_close($curl);
echo $output; //輸出 false
echo $error; //輸出 Could not resolve host: www.baidu.com; Name or service not known
在php-fpm模式下用php的curl模塊獲取資源的時候,返回false,打印錯誤:Could not resolve host: www.baidu.com; Name or service not known, 簡單翻譯一下,就是獲取不到這個域名的地址,什麼鬼?然後進行錯誤排查:
- 檢查服務器dns等解析均正常
- 用file_get_contents等方法在php-fpm模式下均失敗,提示相同錯誤
- 同樣代碼,直接在服務器命令行方式執行,正常,包括file_get_contents等方法
- 見鬼了,初步懷疑是php的執行權限導致的問題
然後在google的強力搜索引擎下,查到外國論壇類似錯誤的解決方案,殺掉php-fpm進程,然後用systemctl restart php-fpm
啓動php-fpm成功,然後在嘗試,嘿,終於成功了。
所以,記錄下解決方法:用systemctl restart php-fpm
方式啓動php-fpm即可
還有另一種情況:DNS解析不對
檢查DNS設置是否正確
vim /etc/resolv.conf
#設置DNS
nameserver 114.114.114.114
nameserver 8.8.8.8
記得給文件夾權限哦:
chmod 644 /etc/resolv.conf
保存文件,大功告成,如果按照上面問題不能解決,歡迎留言,一起學習一起進步。