php執行curl錯誤:Could not resolve host: www.baidu.com;Name or service not known

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, 簡單翻譯一下,就是獲取不到這個域名的地址,什麼鬼?然後進行錯誤排查:

  1. 檢查服務器dns等解析均正常
  2. 用file_get_contents等方法在php-fpm模式下均失敗,提示相同錯誤
  3. 同樣代碼,直接在服務器命令行方式執行,正常,包括file_get_contents等方法
  4. 見鬼了,初步懷疑是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

保存文件,大功告成,如果按照上面問題不能解決,歡迎留言,一起學習一起進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章