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

保存文件,大功告成,如果按照上面问题不能解决,欢迎留言,一起学习一起进步。

你可能感兴趣的:(PHP,lnmp)